我正在使用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的核心数据对象。
答案 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);
}
看看你得到了什么,并告诉我,如果这解决了这个问题,希望它有所帮助。