iPhone - 在删除Core Data中的对象后尝试保存新对象时,应用程序崩溃

时间:2011-08-24 21:23:42

标签: iphone ios ipad core-data

好吧,在我删除了存储在CoreData中的所有对象后,我遇到了问题。如果我不删除任何东西,我没有保存的问题,但是一旦我要求它删除所有对象(一切都删除没有错误或问题),然后尝试再次保存,它崩溃,只是给了我一个< strong>节目接收信号:SIGABRT 。这是我的代码。

- (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与存储的对象进行比较,所以我做了一个新的fetch,将它复制到temp NSMutableArray,然后用temp替换self.listOfMovies。但没有变化,仍然崩溃。我有没有删除整个记录并且不再存在?

我想要做的是将所有内容加载到应用程序中,然后删除CoreData中的所有对象,这样当应用程序关闭(或终止)时,它会将所有新数据保存在记录中。我这样做是否正确,或者有更简单的方法吗?哦,是的,我只有一个实体可容纳5个NSStrings,所以没有什么可复杂的。

先谢谢大家。

3 个答案:

答案 0 :(得分:1)

当您调用save方法时,可能会出现一些混淆,例如managedObjectContext

您是否尝试在删除后立即保存(例如,在上面的deleteStoredData方法中)?

顺便说一句,我也会选择克里斯托弗的代码; - )。

答案 1 :(得分: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];
}

答案 2 :(得分:0)

由于你已经在数组中拥有了所有的managedObject,所以你不需要再进行另一次获取,只需使用下面的代码删除它们就可以了。

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

如果仍有问题,请告诉我你的应用程序中有多少个managedObjectContext?您是否在后台线程中删除或保存它?

此外,您还可以在应用程序崩溃后在控制台中按“bt - >输入密钥”发布崩溃日志和信息吗?