Wednesday, February 8, 2012

unarchiveObjectWithFile returns NSArray


I am working on NSKeyArchive and running into the problem... What I am having so far is




1.-(BOOL)archiveItem
2.{
3. NSString *path = [self findPath];
4. if ([NSKeyedArchiver archiveRootObject:items toFile:wishListPath])
5. {
6. return YES;
7. }else{
8. return NO;
9. }
10.}
11.-(BOOL)unarchiveItem
12.{
13. NSString *path = [self findPath];
14. self.items = [NSKeyedUnarchiver unarchiveObjectWithFile:path];
15. NSLog(@"Class of items is %@",[self.items class]);
16. if (self.items == nil)
17. return NO;
18. else
19. return YES;
20.}



In my header file, items is declared like




@property (nonatomic, copy) NSMutableArray *items;



However, line 15 shows that type of items is NSArray ( not NSMutablArray)



Does anyone have an idea about this one,please help. All comments are welcomed. Thanks

2 comments:

  1. Change this line in your -(BOOL)unarchiveItem

    self.items = [NSKeyedUnarchiver unarchiveObjectWithFile:path];


    to

    self.items = [[[NSKeyedUnarchiver unarchiveObjectWithFile:path] mutableCopy] autorelease];


    change your declaration

    @property (nonatomic, copy) NSMutableArray *items;


    to

    @property (nonatomic, retain) NSMutableArray *items;

    ReplyDelete
  2. Everytime you archive any object (mutable or immutable)...after unarchiving you will always get an "immutable" copy , so like X Slash wrote..obtain a mutable copy of the array..!!

    ReplyDelete