从NSOrderedSet和Core数据中删除项目

时间:2014-05-06 02:24:02

标签: ios objective-c core-data

我正在使用Core Data进行项目,我遇到了一些删除与Book对象有关系的Page对象的问题(Book对象存储了一个存储Page对象的NSOrderedSet)。我尝试删除:

- (void) deleteFiles: (Page *)deletedPage {
    NSFileManager *fileManager = [NSFileManager defaultManager];
    NSError *err;
    NSString *filePath = deletedPage.imageURL;
    BOOL success = [fileManager removeItemAtPath:filePath error:&err];

    AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
    NSManagedObjectContext *context = [appDelegate managedObjectContext];
    NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
    [fetchRequest setEntity:[NSEntityDescription entityForName:@"Page" inManagedObjectContext:context]];
    [fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"imageURL == %@", deletedPage.imageURL]];
    NSError* error = nil;
    NSArray* results = [context executeFetchRequest:fetchRequest error:&error];

    for (NSManagedObject *product in results) {
        NSLog(@"%@", product);
        [context deleteObject:product];
    }
    [book removeHasPagesObject: deletedPage];
    [context save:&error];

}

它似乎在应用程序仍在运行时工作。但是,如果我退出应用程序并重新打开它,我以前删除的一些Page对象仍然存在。

注意:虽然我在每个循环中使用a来删除上下文中的内容,但我一次只删除一个对象,因为每个对象都有一个唯一的imageURL值。

注意:book是一个Book对象,我从另一个类的segue传入该类。 book是此类中的全局变量,是包含Page对象所在的NSOrderedSet的核心数据对象。

1 个答案:

答案 0 :(得分:1)

此:

  当应用程序仍在运行时,

似乎正常工作。但是,如果我退出应用程序并重新打开它,我以前删除的一些Page对象仍然存在。

通常在未正确保存上下文时发生。试试这个:

NSError *savingError = nil;

if ([self.YourManagedObjectContext save:&savingError]) {
    NSLog(@"Successfully saved the context.");
} else {
    NSLog(@"Failed to save the context. Error = %@", savingError);
}

看看你得到了什么,并告诉我,如果这解决了这个问题,希望它有所帮助。