配列などを操作するためにシングルトンを使用します。アプリケーションのビューを横断します。
NSManagedObjectContext
オブジェクトを取得できるようにシングルトンと を初期化するには、次を使用します。
+(DataControllerSingleton *)singleDataController
{
static DataControllerSingleton * single=nil;
@synchronized(self)
{
if(!single)
{
single = [[DataControllerSingleton alloc] init];
NSManagedObjectContext *context = [single.fetchedResultsController managedObjectContext];
single.masterCareList = [[NSMutableArray alloc] init];
}
}
return single;
}
新しいオブジェクトを挿入すると、そのオブジェクトはアプリケーションを再起動するまで表示機能に表示されません。このメソッドを使用して、シングルトン クラスに新しいオブジェクトを挿入します。
- (void)insertNewObject:(Care *)care
{
NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];
NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:
[entity name] inManagedObjectContext:self.managedObjectContext];
NSString *fileName = care.pictureURL;
NSString *text = care.causeText;
NSDate *date = care.date;
NSData *imgData = care.imageData;
[newManagedObject setValue:fileName forKey:@"urlPath"];
[newManagedObject setValue:text forKey:@"name"];
[newManagedObject setValue:date forKey:@"date"];
[newManagedObject setValue:imgData forKey:@"imageData"];
// Save the context.
[self saveContext];
NSError *error = nil;
if (![context save:&error]) {
// Replace this implementation with code to handle the error appropriately.
// abort() causes the application to generate a crash log and terminate. You should
not use this function in a shipping application, although it may be useful during
development.
NSLog(@"Unresolved error %@, %@", error, [error userInfo]);
abort();
}
}
私の count メソッドは、アプリケーションを再起動するまで新しいオブジェクトが含まれていないことを伝える方法です。count メソッドもシングルトンに含まれています。
- (NSUInteger)countOfList
{
NSArray *fetchedData = [_fetchedResultsController fetchedObjects];
return [fetchedData count];
}
シングルトンを呼び出すときは、次を使用します。
DataControllerSingleton *singletonData = [DataControllerSingleton singleDataController];
[singletonData insertNewObject:care];
managedObjectContext
財産:
.h:
@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
.m:
@implementation DataControllerSingleton
@synthesize managedObjectContext = _managedObjectContext;
@synthesize managedObjectModel = _managedObjectModel;
@synthesize persistentStoreCoordinator = _persistentStoreCoordinator;
アプリケーションを再起動するまで、新しいオブジェクトが ex カウントに表示されないのはなぜですか?
どういうわけか、異なるコンテキストを持つ異なるスレッド、または異なる fethedResultsController または異なるシングルトンを使用していますか? (可能ではありませんか?)?
生成された CoreData スタックに含まれていないこれらの 2 行を追加したところ、正常に動作するようになりました。
シングルトンヘッダーで:
@interface DataControllerSingleton : NSObject <NSFetchedResultsControllerDelegate>
実装ファイルでは、
(NSFetchedResultsController *)fetchedResultsController {
_fetchedResultsController.delegate = self;