好吧,在我删除了存储在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,所以没有什么可复杂的。
先谢谢大家。
答案 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
- >输入密钥”发布崩溃日志和信息吗?