fetchRequest 是返回空数组
Posted
技术标签:
【中文标题】fetchRequest 是返回空数组【英文标题】:fetchRequest is return empty array 【发布时间】:2014-07-27 15:43:05 【问题描述】:我正在尝试从我的数据库中获取请求。但我的回应是零。获取是可以的,因为当我使用这种方法时,我会得到“有时”的值。 (我知道我在数据库中有数据)。我认为这与线程问题或因为我正在使用多上下文有关。所以我的问题基本上是通用的。
-
1234563 (假设我保存了孩子和父母,我可以看到数据库上的变化)
如果我使用使用 NSPrivateQueueConcurrencyType 的 MOC 保存数据,我可以使用 MOC NSMainQueueConcurrencyType 获取数据吗?和相反的方式..?
我可以在后台线程上获取数据还是我必须在主线程上获取?
Main线程和NSMainQueueConcurrencyType有什么联系
Background 线程和 NSPrivateQueueConcurrencyType 有什么联系 谢谢,
更新:
问题是我获取一些实体并将一些标志更改为 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);
else
if (completion)
completion(YES, nil);
];
else
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);
else
if (toDoSync)
// DO sync with Parse
if (completion)
completion(YES, nil);
else
if (completion)
completion(NO, nil);
当我检查我的数据库时,数据就在那里!但是当我尝试取它时,我看不到任何东西。
【问题讨论】:
【参考方案1】:是的。但是您需要找到一种方法来通知 MOC 您所做的更改。您可以通过使用子/父上下文 (parentContext
)、保存到 persistentStoreCoordinator
或使用 mergeChangesFromContextDidSaveNotification
合并更改来做到这一点。在任何情况下,您都必须save
才能传播更改。
是的。与 #1 相同。
只要您使用与此 MOC 关联的线程/队列,您就可以在您希望的任何线程上获取。您可以通过使用performBlock
或确保您运行NSMainQueueConcurrencyType
并从主线程调用获取来做到这一点。
NSMainQueueConcurrencyType
应该只在主线程上运行。
NSPrivateQueueConcurrencyType
有自己的私有队列。使用performBlock
在该队列上运行提取。
【讨论】:
嘿,谢谢!!!关于 1. 你的意思是我用 MOC1 保存了一些东西(也用 Master MOC 保存,它在 DB 上)我需要通知另一个 MOC,MOC2,需要获取?以上是关于fetchRequest 是返回空数组的主要内容,如果未能解决你的问题,请参考以下文章
带有多个 sortDescriptor 和 Bool 过滤器的 Swift fetchRequest
NSArray 作为核心数据 fetchRequest 中的参数