cuốn sách gpt4 ai đã làm

ios - fetchRequest 返回空数组

In lại Tác giả: Walker 123 更新时间:2023-11-29 02:47:06 25 4
mua khóa gpt4 Nike

我正在尝试从我的数据库中获取请求。但我的回应为零。获取是可以的,因为当我使用这种方法时,我得到“有时”值。 (我知道我在数据库中有数据)。我认为这在某种程度上与线程问题有关,或者因为我正在使用多上下文。所以我的问题基本上是通用的。

  1. 如果我在特定的 MOC 中保存一些数据,我们将其称为 MOC1,然后我想获取我刚刚保存的数据..我可以使用任何 MOC 吗? (假设我保存了 child 和 parent ,我可以看到数据库上的变化)

  2. 如果我使用使用 NSPrivateQueueConcurrencyType 的 MOC 保存数据,我可以使用 MOC NSMainQueueConcurrencyType 获取数据吗?和相反的方式..?

  3. 我可以在后台线程上获取数据还是必须在主线程上获取数据?

  4. Main线程和NSMainQueueConcurrencyType之间有什么联系

  5. 后台线程和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);
}
}

当我检查数据库时,数据就在那里!但当我尝试获取它时,我看不到任何东西。

câu trả lời hay nhất

  1. 是的。但您需要找到一种方法来通知 MOC 您所做的更改。您可以通过使用子/父上下文 (parentContext)、保存到 persistentStoreCoordinator hoặc sử dụng mergeChangesFromContextDidSaveNotification 合并更改来实现。在任何情况下,您都必须保存才能传播更改。

  2. 是的。与 #1 相同。

  3. 只要您使用与此 MOC 关联的线程/队列,您就可以在任何您想要的线程上获取数据。您可以通过使用 performBlock 或确保您正在运行 NSMainQueueConcurrencyType 并从主线程调用提取来做到这一点。

  4. NSMainQueueConcurrencyType 应该仅在主线程上运行。

  5. NSPrivateQueueConcurrencyType 有自己的私有(private)队列。使用 performBlock 在该队列上运行提取。

关于ios - fetchRequest 返回空数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24982562/

25 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress