我正在尝试从我的数据库中获取请求。但我的回应为零。获取是可以的,因为当我使用这种方法时,我得到“有时”值。 (我知道我在数据库中有数据)。我认为这在某种程度上与线程问题有关,或者因为我正在使用多上下文。所以我的问题基本上是通用的。
如果我在特定的 MOC 中保存一些数据,我们将其称为 MOC1,然后我想获取我刚刚保存的数据..我可以使用任何 MOC 吗? (假设我保存了 child 和 parent ,我可以看到数据库上的变化)
如果我使用使用 NSPrivateQueueConcurrencyType 的 MOC 保存数据,我可以使用 MOC NSMainQueueConcurrencyType 获取数据吗?和相反的方式..?
我可以在后台线程上获取数据还是必须在主线程上获取数据?
Main线程和NSMainQueueConcurrencyType之间有什么联系
后台线程和NSPrivateQueueConcurrencyType之间有什么联系谢谢,
gia hạn:
问题是,当我想保存它时,我获取一些实体并将一些标志更改为 isSync = YES,我使用我的保存方法:
-(void)saveDataToDBWithCompletionWithManagedObjectContext:(NSManagedObjectContext*)managedObjectContext withCompletion:(void (^)(BOOL succeeded ,NSError *error))completion {
if (managedObjectContext != nil) {
[managedObjectContext performBlockAndWait:^{
NSError *errorMsg = nil;
if ([managedObjectContext hasChanges] && ![managedObjectContext save:&errorMsg]) {
// do some real error handling
NSLog(@"couldn't save Background Context, error %@, %@", errorMsg, [errorMsg userInfo]);
if (completion) {
completion(NO, errorMsg);
}
} khác {
if (completion) {
completion(YES, nil);
}
}
}];
} khác {
if (completion) {
completion(NO, nil);
}
}
该方法获取NSManagedObjectContext,并将其保存到相关的NSManagedObjectContext中。然后我运行我的主保存:
-(void)saveMasterDataToDBWithSync:(BOOL)toDoSync WithCompletion:(void (^)(BOOL succeeded ,NSError *error))completion {
NSError *errorMsg = nil;
if (self.masterManagedObjectContext != nil) {
if ([self.masterManagedObjectContext hasChanges] && ![self.masterManagedObjectContext save:&errorMsg]) {
if (completion) {
completion(NO, errorMsg);
}
} khác {
if (toDoSync) {
// DO sync with Parse
}
if (completion) {
completion(YES, nil);
}
}
} khác {
if (completion) {
completion(NO, nil);
}
}
当我检查数据库时,数据就在那里!但当我尝试获取它时,我看不到任何东西。
是的。但您需要找到一种方法来通知 MOC 您所做的更改。您可以通过使用子/父上下文 (parentContext
)、保存到 persistentStoreCoordinator
hoặc sử dụng mergeChangesFromContextDidSaveNotification
合并更改来实现。在任何情况下,您都必须保存
才能传播更改。
是的。与 #1 相同。
只要您使用与此 MOC 关联的线程/队列,您就可以在任何您想要的线程上获取数据。您可以通过使用 performBlock
或确保您正在运行 NSMainQueueConcurrencyType
并从主线程调用提取来做到这一点。
NSMainQueueConcurrencyType
应该仅在主线程上运行。
NSPrivateQueueConcurrencyType
有自己的私有(private)队列。使用 performBlock
在该队列上运行提取。
Tôi là một lập trình viên xuất sắc, rất giỏi!