2015-05-22 44 views
-1

我有一個應用程序可以在手機中保存大量數據。我使用下面的代碼:核心數據正在刪除應用程序崩潰時的記錄

- (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核心數據進行提交時,舊數據不會被刪除)。

當我瀏覽應用程序窗口時會解決此問題,如果應用程序崩潰,則會重新開始。我知道這個問題很奇怪。

那麼,有沒有辦法解決這個問題?也許有一個提交語句或類似的東西。

感謝您的幫助

+0

您是否確定要成功保存數據? https://developer.apple.com/library/ios/documentation/Cocoa/Reference/CoreDataFramework/Classes/NSManagedObjectContext_Class/index.html#//apple_ref/occ/instm/NSManagedObjectContext/save: –

+0

如果應用程序沒有崩潰,即使我關閉手機或關閉應用程序,數據仍會保留。 – atrik

+0

@atrik由於應用程序仍處於活動狀態,手機處於「關閉」狀態或應用程序關閉時數據仍然存在。如果您創建或更改NSManagedObjects而不使用「保存」,它們將一直存在,直到iOS應用程序處於非活動狀態時,iOS會在後臺停止或關閉手機(不僅僅是「關閉」)或崩潰時將其停止。每當您完成一組相關的更改以避免發生這種情況時,請使用保存 - 請參閱下面的答案。 –

回答

0

使用[上下文保存:&錯誤]提交更改。

+0

謝謝,它正在工作! – atrik

0

使用上下文保存&錯誤或如果您使用magicall記錄使用MR_Save持久性存儲和等待方法其他明智無法從存儲中刪除數據。