Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

The Archive Base

The Archive Base Logo The Archive Base Logo

The Archive Base Navigation

  • SEARCH
  • Home
  • About Us
  • Blog
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • Add group
  • Groups page
  • Feed
  • User Profile
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Buy Points
  • Users
  • Help
  • Buy Theme
  • SEARCH
Home/ Questions/Q 4617022
In Process

The Archive Base Latest Questions

Editorial Team
  • 0
Editorial Team
Asked: May 22, 20262026-05-22T02:03:56+00:00 2026-05-22T02:03:56+00:00

So I have a project that uses the old-style encodeObject:/decodeObject NSCoder serialization. I need

  • 0

So I have a project that uses the old-style encodeObject:/decodeObject NSCoder serialization. I need to add a new object to the serialization process but previously saved documents will crash as decodeObject tries to decode something that’s not there (yet).

-(void) encodeWithCoder:(NSCoder *)aCoder {
    [super encodeWithCoder:aCoder];
    [aCoder encodeObject:existingArray];
    [aCoder encodeObject:anotherExistingArray];

    [aCoder encodeObject:myNewArray];
}

-(id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    if( self != nil ) {
        NSArray *_existingArray = [aDecoder decodeObject];
        NSArray *_anotherExistingArray = [aDecoder decodeObject];

        // We crash here, this object doesn't exist in documents saved with only the first two arrays
        NSArray *_myNewArray = [aDecoder decodeObject]; 
    }
    return( self );
}

I don’t think I can convert this to a keyed archive and maintain compatibility with previously saved archives (which is a requirement). Trying to catch the exception that’s thrown doesn’t seem to help either.

Any ideas?

UPDATE: Bah, why is it when you ask a question you almost immediately find the answer yourself?

This class was versioned correctly. Previous author had a bug in the version check. So for completeness:

+ (void) initialize {
    if( self == [MyClass class] ) {
        [self setVersion:2]; // was 1
    }
}

-(void) encodeWithCoder:(NSCoder *)aCoder {
    [super encodeWithCoder:aCoder];
    [aCoder encodeObject:existingArray];
    [aCoder encodeObject:anotherExistingArray];
    [aCoder encodeObject:myNewArray];
}

-(id) initWithCoder:(NSCoder *)aDecoder {
    self = [super initWithCoder:aDecoder];
    int version = [aDecoder versionForClassName:@"MyClass"];
    if( self != nil ) {
        NSArray *_existingArray = [aDecoder decodeObject];
        NSArray *_anotherExistingArray = [aDecoder decodeObject];

        if( version > 1 ) {
            NSArray *_myNewArray = [aDecoder decodeObject]; 
        }
    }
    return( self );
}
  • 1 1 Answer
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

1 Answer

  • Voted
  • Oldest
  • Recent
  • Random
  1. Editorial Team
    Editorial Team
    2026-05-22T02:03:58+00:00Added an answer on May 22, 2026 at 2:03 am

    Continue to read old files (read-only) with serial archiver.
    Load and save new files with keyed archiver, detect by:

    [NSCoder allowsKeyedCoding]
    
    • 0
    • Reply
    • Share
      Share
      • Share on Facebook
      • Share on Twitter
      • Share on LinkedIn
      • Share on WhatsApp
      • Report

Sidebar

Related Questions

We have an old project that requires occasional maintenance that uses VS2003 and Dot
I have a rails project that uses an old versions of the FlexImage plug-in
We have an old project that we maintain that uses brace indenting. Rather than
I have an old EJB (2.1) project that uses xdoclet (1.2.3) to generate the
I have an old project that uses MPXJ library to access MS Project 2010.
I have Midas project that uses a TDataSetProvider in one of RemoteDataModules in the
I have inherited a project that uses LLBLGen Pro for the DB layer. The
I have inherited a project that uses the following pattern for passing parameters from
I have a .net interop project that uses an app.config file. When I am
I have a native VC++ project that uses a dll (which is not in

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help
  • SEARCH

Footer

© 2021 The Archive Base. All Rights Reserved
With Love by The Archive Base

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.