2011-08-24 58 views
0

好吧,我刪除了存儲在CoreData中的所有對象之後保存問題。如果我不刪除任何東西,我沒有問題,但是一旦我要求它刪除所有對象(刪除所有對象都沒有錯誤或問題),然後再次嘗試保存,它會崩潰並給我一個程序接收信號:SIGABRT。這是我的代碼。iPhone - 刪除CoreData中的對象後嘗試保存新對象時應用程序崩潰

- (void)deleteStoredData 
{ 
    // Define our table/entity to use 
    NSEntityDescription *entity = [NSEntityDescription entityForName:MOVIE_LIST inManagedObjectContext:managedObjectContext]; 

    // Setup the fetch request 
    NSFetchRequest *request = [[NSFetchRequest alloc] init]; 
    [request setEntity:entity]; 

    // Fetch the records and handle an error 
    NSError *error; 
    NSUInteger count = [managedObjectContext countForFetchRequest:request error:&error]; 

    if (count) { 
     for (int i = 0; i < count - 1; i++) { 
      NSManagedObject *eventToDelete = [self.listOfMovies objectAtIndex:i]; 
      [managedObjectContext deleteObject:eventToDelete]; 
     } 
    } 

    [request release]; 
} 

我想這可能是我比較self.listOfMovies存儲的對象,所以我做了一個新的獲取,它複製到一個臨時的NSMutableArray,然後替換爲臨時self.listOfMovies。但沒有變化,仍然崩潰。我有一些如何刪除整個記錄,它不再存在?

我想要做的是將所有內容加載到應用程序中,然後刪除CoreData中的所有對象,以便在應用程序關閉(或終止)時將所有新數據保存在記錄中。我是否正確地做了這件事,還是有更簡單的方法來做到這一點?噢,我只有一個擁有5個NSStrings的實體,所以沒有什麼複雜的。

在此先感謝大家。

+0

很難說出你想要做什麼。數據模型的高級描述,發生錯誤的行和實際發生的錯誤將非常有用。 –

+0

我只有一個實體在我的模型中。稱爲電影。該實體有5個屬性是NSString的。如果我所做的一切都是保存,那麼一切都可以完美保存它提取沒有問題。只有當我嘗試刪除對象然後保存時纔會出現問題。它在保存並在主應用程序上提供SIGABRT時崩潰。 –

+0

此代碼將從持久性存儲中刪除所有「MOVIE_LIST」對象及其所有數據。那是你想要做什麼? – TechZen

回答

1

也許,當你調用保存方法,可能有一些的mixup一些變量,如managedObjectContext

您是否嘗試在刪除後立即保存(即在您的deleteStoredData方法中)?

順便說一句,我也會去克里斯托弗的代碼;-)。

+0

我將代碼更改爲Christopher建議的內容,但沒有幫助。是的,我在刪除後嘗試保存。那是什麼時候發生的。如果我不刪除任何東西,我可以整天保存。但只要我嘗試刪除一個對象,該程序崩潰,給我** SIGABRT **錯誤。 –

+0

也許你的持久性商店壞了?嘗試重置模擬器。 – Mundi

+0

好吧,看起來就是這樣。模擬器是一個去煮食的人。我在手機上加載了應用程序,並且完美運行。現在我只好弄清楚它爲什麼會加載錯誤。謝謝。 –

0

使用for循環刪除託管對象很容易出錯,並且可能會損壞managedObjectContext。請嘗試以下操作:

NSFetchRequest * fetch = [[[NSFetchRequest alloc] init] autorelease]; 

[fetch setEntity:[NSEntityDescription entityForName:MOVIE_LIST inManagedObjectContext:context]]; 

NSArray * result = [context executeFetchRequest:fetch error:nil]; 

for (NSManagedObject * event in result) { 
    [context deleteObject:event]; 
} 
+0

試過這個,但同樣的問題。這讓我瘋狂......大聲笑。 –

+0

這有助於減少錯誤,但我發現我的問題是模擬器需要重置並重新安裝。謝謝。 –

0

既然你已經擁有了你的數組中的所有managedObject,你不需要再做一次fetch,只需用下面的代碼刪除它們就可以。

for (NSUInteger i = 0; i < [self.listOfMovies count] - 1; i++) { 
    NSManagedObject *eventToDelete = [self.listOfMovies objectAtIndex:i]; 
    [managedObjectContext deleteObject:eventToDelete]; 
} 

如果它仍然有問題,你能告訴我你的應用程序中有多少個managedObjectContext?你是否刪除或保存在後臺線程?

另外,您還可以在應用程序崩潰後在控制檯中鍵入「bt - > enter key」併發布崩潰日誌和信息?

相關問題