User Rejections / KeyedArchiver

I am working on a home application that uses custom Assignment objects for each assignment. I am trying to save an NSMutableArray (passed by NSArray via initWithArray :) to standardUserDefaults, but I am having problems saving and reloading the array.

I have a table view from which you can add a new task (which loads NewAssignmentViewController). When you save the assignment, it returns to the array in the AssigmentsViewController. And then you call it every time you load a UITableView that shows tasks.

Here is the related code:

-(void)saveToUserDefaults:(NSArray*)myArray{
NSUserDefaults *standardUserDefaults = [NSUserDefaults standardUserDefaults];

if (standardUserDefaults) {
    [standardUserDefaults setObject:[NSKeyedArchiver archivedDataWithRootObject:myArray] forKey:@"Assignments"];
    [standardUserDefaults synchronize];
    }
}

-(void)retrieveFromUserDefaults{
NSUserDefaults *currentDefaults = [NSUserDefaults standardUserDefaults];
NSData *dataRepresentingSavedArray = [currentDefaults objectForKey:@"Assignments"]; 
if (dataRepresentingSavedArray != nil) {
    NSArray *oldSavedArray = [NSKeyedUnarchiver unarchiveObjectWithData:dataRepresentingSavedArray];
    if ([oldSavedArray count] != 0) {
        [assignments setArray:[[NSMutableArray alloc] initWithArray:oldSavedArray]];
    }
    else {
        assignments = [[NSMutableArray alloc] initWithCapacity:100];
    }
}
}
 -(void)backButtonPressed {
[self saveToUserDefaults:[[NSArray alloc] initWithArray:assignments]];
[self.navigationController popViewControllerAnimated:YES];
}

Please, help. It does not load the array, but does not give any errors. Any advice on UserDefault or KeyedArchiver in general would be appreciated.

+3
2

:

, , .

NSUserDefaults, Assignment NSCoding, :

- (void)encodeWithCoder:(NSCoder *)encoder;
- (id)initWithCoder:(NSCoder *)decoder;

Assignment, dunno, . , . . .

NSUserDefaults, , . . NSUserDefaults : , , .

, .

iPhone :

, NSCoding, . -, NSMutableData , NSKeyedArchiver NSMutableData:

NSMutableData *data = [[NSMutableData alloc] init]; 
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];

, , :

[archiver encodeObject:myObject forKey:@"keyValueString"];

weve , , , , NSMutableData .

[archiver finishEncoding]; BOOL success = [data writeToFile:@"/path/to/archive" atomically:YES]; 
[archiver release]; 
[data release];

, . NSData NSKeyedUnarchiver :     NSData * data = [[NSData alloc] initWithContentsOfFile: ];     NSKeyedUnarchiver * unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData: data]; unarchiver, , :

self.object = [unarchiver decodeObjectForKey:@"keyValueString"];

.

, . . , Core Data , .

+2

, , Defaults NSData. NSUserDefaults, , .

0

Source: https://habr.com/ru/post/1725315/


All Articles