0

Я пытаюсь сохранить свою локацию CLLocation для будущего использования в своем приложении. Я придумал следующее:Как лучше сохранить CLLocation?

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"/Locations.plist"]; 
NSMutableDictionary *data = [[NSMutableDictionary alloc] initWithContentsOfFile: path]; 

[data setValue:[NSKeyedArchiver archivedDataWithRootObject:location] forKey:@"LocationList"]; 
[data writeToFile:path atomically:YES]; 

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:[NSKeyedUnarchiver unarchiveObjectWithData: (NSData *)[data objectForKey:@"LocationList"]]]; 
    NSLog(@"%@",array); 

Когда я запускаю мое приложение, компилятор возвращает

-[NSKeyedUnarchiver initForReadingWithData:]: data is NULL 

Что я делаю неправильно? Или есть лучший и стандартный способ сохранить данные CLLocation?

+0

Вы специально не использовали NSKeyedArchiver? Или использовать CoreData? Каков ваш прецедент? – Chris

ответ

0

Вы потеряли информацию о том, что ваши методы действительно возвращают, что является риском, когда вы вставляете несколько вызовов сообщений друг в друга.

Вы сохранили CLLocation, так что это возвращает CLLocationObject:

[NSKeyedUnarchiver unarchiveObjectWithData: (NSData *)[data objectForKey:@"LocationList"]] 

Вы код лечащему его, как если бы он был возвращающая массив:

NSMutableArray *array = [[NSMutableArray alloc] initWithArray:... // Your returned CLLocation here. 

Именно поэтому массив был NULL , Что касается того, как хранить данные CLLocation, подход кодирования является правильным. (См. this answer for a clear reference to storing CLLocations as NSData objects.)

Смежные вопросы