我有一個應用程序可以在手機中保存大量數據。我使用下面的代碼:核心數據正在刪除應用程序崩潰時的記錄
- (void)datostickets:(NSString*)cod local:(NSString*)nombre{
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = [appDelegate managedObjectContext];
NSEntityDescription *ticket =[NSEntityDescription entityForName:@"History" inManagedObjectContext:context];
NSFetchRequest *request = [[NSFetchRequest alloc] init];
[request setEntity:ticket];
NSPredicate *pred = [NSPredicate predicateWithFormat:@"(codigo = %@)", cod];
[request setPredicate:pred];
//NSManagedObject *matches = nil;
NSError *error;
NSArray *objects = [context executeFetchRequest:request error:&error];
if ([objects count] == 0) {
NSManagedObject *nuevoticket = [NSEntityDescription insertNewObjectForEntityForName:@"History" inManagedObjectContext:context];
[nuevoticket setValue:[NSString stringWithFormat:@"%@",cod] forKey:@"codigo"];
[nuevoticket setValue:self.idloc forKey:@"actividad"];
[nuevoticket setValue:nombre forKey:@"localidad"];
NSLog(@"GRABA: %@",cod);
} else {
NSLog(@"VERIFICA");
check++;
}}
它節省了罰款,但問題發生,如果應用程序崩潰(我認爲這只是發生這種方式,還當我操縱數據的應用程序只崩潰)。
當應用程序崩潰時,Core Data開始行爲真的很奇怪,它刪除了我保存的最新數據,但不知何故,某些舊數據不會被刪除(顯然,當我更改viewController核心數據進行提交時,舊數據不會被刪除)。
當我瀏覽應用程序窗口時會解決此問題,如果應用程序崩潰,則會重新開始。我知道這個問題很奇怪。
那麼,有沒有辦法解決這個問題?也許有一個提交語句或類似的東西。
感謝您的幫助
您是否確定要成功保存數據? https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/index.html#//apple_ref/occ/instm/NSManagedObjectContext/save: –
如果應用程序沒有崩潰,即使我關閉手機或關閉應用程序,數據仍會保留。 – atrik
@atrik由於應用程序仍處於活動狀態,手機處於「關閉」狀態或應用程序關閉時數據仍然存在。如果您創建或更改NSManagedObjects而不使用「保存」,它們將一直存在,直到iOS應用程序處於非活動狀態時,iOS會在後臺停止或關閉手機(不僅僅是「關閉」)或崩潰時將其停止。每當您完成一組相關的更改以避免發生這種情況時,請使用保存 - 請參閱下面的答案。 –