1

CLLocation データをアーカイブする方法がわかりません。

アプリが (ユーザーまたは OS によって) 強制終了されたときにロケーション マネージャーから取得した 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

4

1 に答える 1

1

iOS 4 以降、デバイスがマルチタスクをサポートしている場合、このapplicationWillTerminate:メソッドは呼び出されないことに注意してください。applicationDidEnterBackground:代わりに使用してください。さらに良いのは、データが変更されるたびにすぐにデータを保存し、アプリがバックグラウンドになるのを待たないことです。そうしないと、アプリがクラッシュしたり、デバッガーで強制終了したりすると、データが失われます。

NSTemporaryDirectory()また、テスト用であっても、ファイルを に保存するのが良い考えかどうかはわかりません。アプリを再起動したときに、その場所に保存されたファイルが実際にそこにあるかどうかを確認しましたか。代わりにライブラリ ディレクトリを選択することをお勧めします。

于 2012-06-01T14:33:05.163 に答える