Я пытаюсь сохранить объекты, называемые блобами, используя NSKeyedArchiver.Я использую NSMutableData и NSKeyedArchiver, чтобы сохранить данные в файл, который представляет этот объект.затем я использую NSData и NSKeyedUnarchiver для получения данных из файлов.
Кажется, что все работает нормально, без ошибок, но когда я загружаю его, все свойства равны «0» или ноль.
Почему это?
-(void) LoadBlobs
{
[blobs release];
blobs = nil;
blobs = [[NSMutableArray alloc]init];
NSNumber *blobAmounts = [[NSUserDefaults standardUserDefaults]objectForKey:blobAmount];
if([blobAmounts intValue] <= 0)
{
return;
}
for(int i = 0; i < [blobAmounts intValue]; i++)
{
NSLog(@"Loading Blob #%i...", i);
NSString *curBlobDirectory = [[NSString alloc]initWithFormat:@"%@%i", saveDirectoryBlobs, i];
NSLog(@"Blob directory is: %@", curBlobDirectory);
NSData *blobData = [[NSData alloc]initWithContentsOfFile:curBlobDirectory];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc]initForReadingWithData:blobData];
Blob *b = [[Blob alloc]initWithFile:@"Blob.png"];
b.position = CGPointMake([[unarchiver decodeObjectForKey:@"x"]intValue], [[unarchiver decodeObjectForKey:@"y"]intValue]);
b.health = [[unarchiver decodeObjectForKey:@"health"]intValue];
b.mating = [[unarchiver decodeObjectForKey:@"mating"]intValue];
b.aiEntity = [[unarchiver decodeObjectForKey:@"entity"]intValue];
b.action = [[unarchiver decodeObjectForKey:@"action"]intValue];
b.faction = [[unarchiver decodeObjectForKey:@"faction"]intValue];
b.equippedHelmet = [[unarchiver decodeObjectForKey:@"helmet"]boolValue];
b.equippedSpear = [[unarchiver decodeObjectForKey:@"spear"]boolValue];
b.goingTo = CGPointMake([[unarchiver decodeObjectForKey:@"gx"]intValue], [[unarchiver decodeObjectForKey:@"gy"]intValue]);
b.homeID = [[unarchiver decodeObjectForKey:@"home"]intValue];
b.aiID = [[unarchiver decodeObjectForKey:@"ai"]intValue];
b.iD = [[unarchiver decodeObjectForKey:@"id"]intValue];
NSLog(@"Blob #%i properties are: %f, %i, %i, %i, %i, %i, %i", i, b.health, b.mating, b.aiEntity, b.faction, b.action, b.equippedHelmet, b.equippedSpear);
[blobs addObject:b];
[self addChild:b z:1];
[unarchiver finishDecoding];
[blobData release];
[curBlobDirectory release];
[unarchiver release];
}
NSLog(@"%i blobs successfully loaded!", [blobs count]);
}
-(void) SaveBlobs
{
[[NSUserDefaults standardUserDefaults]setValue:[NSNumber numberWithBool:true] forKey:gameSavedPrev];
int i = 0;
for(Blob *b in blobs)
{
NSLog(@"Saving Blob #%i...", i);
NSString *curBlobDirectory = [[NSString alloc]initWithFormat:@"%@%i", saveDirectoryBlobs, i];
NSMutableData *blobData = [[NSMutableData alloc]init];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc]initForWritingWithMutableData:blobData];
[archiver encodeInt:b.position.x forKey:@"x"];
[archiver encodeInt:b.position.y forKey:@"y"];
[archiver encodeInt:b.health forKey:@"health"];
[archiver encodeInt:b.mating forKey:@"mating"];
[archiver encodeInt:b.aiEntity forKey:@"entity"];
[archiver encodeInt:b.action forKey:@"action"];
[archiver encodeInt:b.faction forKey:@"faction"];
[archiver encodeBool:b.equippedHelmet forKey:@"helmet"];
[archiver encodeBool:b.equippedSpear forKey:@"spear"];
[archiver encodeInt:b.position.x forKey:@"gx"];
[archiver encodeInt:b.position.y forKey:@"gy"];
[archiver encodeInt:b.homeID forKey:@"home"];
[archiver encodeInt:b.aiID forKey:@"ai"];
[archiver encodeInt:b.iD forKey:@"id"];
[archiver finishEncoding];
BOOL success = [blobData writeToFile:curBlobDirectory atomically:YES];
NSLog(@"Blob directory is: %@", curBlobDirectory);
[archiver release];
[blobData release];
[curBlobDirectory release];
i++;
}
}