2011-08-24 56 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”并发布崩溃日志和信息?

相关问题