将CLLocation数组保存到Archive ios

时间:2012-06-01 14:19:00

标签: ios arrays object archive cllocation

我似乎无法弄清楚如何归档我的CLLocation数据。

我希望在应用程序被杀死时(通过用户或操作系统)归档从位置管理器检索到的CLLocation对象,并在启动时检索它。 但是,在applicationWillEnterForeground方法中取消归档后,NSLog打印的计数为0 有人能告诉我我做错了什么吗? 这就是我所拥有的:

-(void)applicationWillTerminate:(UIApplication *)application {

if([self.locs count] > 0) {
    NSArray* arr = [[NSArray alloc] initWithObjects:self.locs, nil];
    NSString *archivePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Locs.archive"];
    [NSKeyedArchiver archiveRootObject:arr toFile:archivePath];
    //[arr release];
}
[self.locationManager stopUpdatingLocation];
[self.locationManager release];
}

-(void)applicationWillEnterForeground:(UIApplication *)application {
NSString *archivePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"Locs.archive"];
self.locs = [NSKeyedUnarchiver unarchiveObjectWithFile:archivePath];
NSLog(@"friet : %i", [self.locs count]);
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(networkStatusChanged:) name:kReachabilityChangedNotification object:nil];
[self sendLocations];
}

这些是文档,我已经找到了它们,但它们对我没有任何意义!

https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/Archiving/Articles/codingctypes.html#//apple_ref/doc/uid/20001294-96887

1 个答案:

答案 0 :(得分:1)

您必须意识到,从iOS 4开始,如果设备支持多任务处理,则永远不会调用applicationWillTerminate:方法。请改用applicationDidEnterBackground:。更好的是,每次更改时立即保存数据,不要等待应用程序背景。否则,如果应用程序崩溃或在调试器中将其终止,您将丢失数据。

另外,我不知道将文件保存到NSTemporaryDirectory()是否是个好主意,即使是测试也是如此。您是否已检查重新启动应用程序时保存到该位置的文件是否确实存在。最好选择库目录。