私は現在、次のようなコアデータエンティティの束を保持している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;
削除されたサブジェクトが再表示される原因について何か考えはありますか?