(void) loadDataFromDisk
{
NSMutableData *data = [[NSMutableData alloc] initWithContentsOfFile:[self pathToDataFile]];
NSKeyedUnarchiver *unarchiver = [[NSKeyedUnarchiver alloc] initForReadingWithData:data];
_cells = [[unarchiver decodeObjectForKey:@"Board"] retain];
[unarchiver release];
[data release];
}
(void) saveDataToDisk
{
NSMutableData *data = [NSMutableData alloc];
NSKeyedArchiver *archiver = [[NSKeyedArchiver alloc] initForWritingWithMutableData:data];
[archiver encodeObject:_cells forKey:@"Board"];
[archiver finishEncoding];
[data writeToFile:[self pathToDataFile] atomically:YES];
//[array release];
[data release];
//NSMutableData
}
(BOOL)gameDataExists
{
return [[NSFileManager defaultManager] fileExistsAtPath:[self pathToDataFile]];
}
(NSString *)pathToDataFile
{
NSString *path = [[NSBundle mainBundle] bundlePath];
return [path stringByAppendingPathComponent: GAME_DAT];
}
上面的代码在模拟器上工作但在device.it上失败似乎是文件不能 在我退出并重新加载我的应用程序后找到。 如果我像这样实现pathToDataFile:
(NSString *)pathToDataFile
{
NSArray * path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES);
NSString *docDir = [path objectAtIndex:0];
return [docDir stringByAppendingPathComponent:GAME_DAT];
}
文件保存和重新加载在设备上工作,但在我调用[self setNeedsDisplay]后,我在视图中实现的drawRect方法无法调用。
克里斯 可以
答案 0 :(得分:1)
捆绑路径在设备上是只读的,但在仿真器上是可读写的。因此,在设备上任何尝试写入的都将失败。
使用文档目录的第二种方法应该可以解决问题。
我不知道为什么[self setNeedsDisplay]对你不起作用,但它可能与这个问题无关。
我在您的代码中发现了一个错误:
NSMutableData *data = [NSMutableData alloc];
应该是:
NSMutableData *data = [[NSMutableData alloc] init];
您还应该在saveDataToDisk方法的末尾发布归档程序。