これまでは共有のCoredataインスタンスを使用していました。ビューコントローラでは、私は[[Storage instance] managedObjectContext]
を呼び出して、ビューコントローラに渡します。Coredata managedobjectContextと私的なivarsの共有インスタンス
私は残酷に間違っているかもしれませんか?どうしてか言ってくれない。
ほとんどの例で気付いたように、viewControllerのヘッダファイルには@privateのmanagedObjectContextがあります。なぜプライベートコールが必要なのですか?
最後に、我々はviewController.m
@synthesize managedObjectContext = _managedObjectContext;
いただきました! "_" managedObjectContextの重要性が、その後
NSManagedObjectContext *_managedObjectContext;
@property (nonatomic, strong) NSManagedObjectContext *managedObjectContext;
のように宣言します。どうしてアンダースコア?
最後に、このすべてがiCloudにどのような影響を与えますか?作家が言った1つのチュートリアルでは、
アイバーズはprivateである必要があり、すべてのコード は、常にこれらが 正しく初期化されていることを確認するために、アクセサメソッドを経由することに非常に重要です。面白いことがなければ_ KVCは をあまりにも助けてくれるかもしれません。 iCloudには、非同期でデータをインポートすると、より多くの タイミングとマルチスレッドの問題
はあなたが表示されない... WATSがここで起こっ
@interface LStorage : NSObject {
@private
NSString *identifier;
NSManagedObjectContext *managedObjectContext;
NSManagedObjectModel *managedObjectModel;
NSPersistentStoreCoordinator *persistentStoreCoordinator;
}
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
+ (LStorage *) instance;
in LStorage.m
+ (LStorage *) instance {
@synchronized(self) {
if (instance == nil) {
instance = [[LStorage alloc] initWithIdentifier:kIdentifier];
}
}
return instance;
}
//identifier is just used to name the mom model filename.
- (id) initWithIdentifier:(NSString *)anIdentifier {
self = [super init];
if(self != nil) {
identifier = anIdentifier;
}
return self;
}
- (NSManagedObjectContext *)managedObjectContext {
if (managedObjectContext != nil) {
return managedObjectContext;
}
NSPersistentStoreCoordinator *coordinator = [self persistentStoreCoordinator];
if (coordinator != nil) {
// Make life easier by adopting the new NSManagedObjectContext concurrency API
// the NSMainQueueConcurrencyType is good for interacting with views and controllers since
// they are all bound to the main thread anyway
if(IOS_VERSION_GREATER_THAN_OR_EQUAL_TO(@"5.0")){
NSManagedObjectContext* moc = [[NSManagedObjectContext alloc] initWithConcurrencyType:NSMainQueueConcurrencyType];
[moc performBlockAndWait:^{
// even the post initialization needs to be done within the Block
[moc setPersistentStoreCoordinator: coordinator];
[[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(mergeChangesFrom_iCloud:) name:NSPersistentStoreDidImportUbiquitousContentChangesNotification object:coordinator];
}];
managedObjectContext = moc;
}else{
managedObjectContext = [[NSManagedObjectContext alloc] init];
[managedObjectContext setPersistentStoreCoordinator:coordinator];
}
}
return managedObjectContext;
}
私はウルコメント – jasonIM
で更新あなたイニシャライザは問題ありません。そのクラスの中の 'managedObjectContext'メソッドにもっと興味があります。 – jasonIM
をしたいと思います初期化子 – Rog