我有一个NSMutableArray,它目前拥有一堆核心数据实体,如下所示:
NSFetchRequest *fetchReq = [[NSFetchRequest alloc]init];
[fetchReq setEntity:[NSEntityDescription entityForName:@"Subject"
inManagedObjectContext:self.managedObjectContext]];
subjectsArray = [self.managedObjectContext executeFetchRequest:fetchReq error:nil];
然后我把这个数组放在字典中:
_childrenDictionary = [NSMutableDictionary new];
[_childrenDictionary setObject:subjectsArray forKey:@"SUBJECTS"];
然后将此词典用作我已实现的源列表的数据。我遇到的问题是从subjectsArray中删除一个对象。我用以下代码尝试了这个:
_selectedSubject = [subjectsArray objectAtIndex:0];
[subjectsArray removeObject:subjectToDelete];
现在,当我执行以下操作时,此功能正常:
for (Subject *s in subjectsArray) {
NSLog(@"Subjects: %@", [s title]);
}
我选择删除的主题不再存在,而源列表我在调用后正确更新:
[_sidebarOutlineView reloadData];
我遇到的问题是,当我退出应用程序并再次打开它时,我之前删除的主题仍然存在。
将核心数据实体提取到数组和字典中是在 applicationDidFinishLaunching 中完成的。目前所有这些代码都在AppDelegate文件中,该文件的.h文件如下所示:
#import <Cocoa/Cocoa.h>
#import "Subject.h"
@interface LTAppDelegate : NSObject <NSApplicationDelegate, NSOutlineViewDelegate, NSOutlineViewDataSource, NSMenuDelegate> {
IBOutlet NSWindow *newSubjectSheet;
IBOutlet NSWindow *newNoteSheet;
IBOutlet NSWindow *newEditSheet;
NSMutableArray *subjectsArray;
}
@property Subject *selectedSubject;
@property (assign)IBOutlet NSOutlineView *sidebarOutlineView;
@property NSArray *topLevelItems;
@property NSViewController *currentContentViewController;
@property NSMutableDictionary *childrenDictionary;
@property NSArray *allSubjects;
有关导致删除的内容的任何想法可能会重新出现吗?
答案 0 :(得分:2)
您正在从本地数组中删除对象,但不删除CoreData存储本身。
要从Core Data商店中删除对象,您需要在其上调用managedObjectContext
deleteObject:theObject
,然后调用managedObjectContent save:&error
来保留它。
如果您正在使用表视图,我建议您也查看NSFetchedResultsController。
答案 1 :(得分:1)
您需要将更改提交到NSManagedObjectContext
才能保留。
查看该类的save:&errorOut
方法以获取详细信息。