2

如果我NSFetchRequest像这样在主线程上创建了一个:

NSManagedObject *bar = ...;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Foo"];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"SELF.bar == %@",
                            [bar objectID]]];

将包含 a的 a 传递给这样NSFetchRequest的后台线程是否安全?NSPredicateNSManagedObjectID

NSManagedObject *bar = nil;
NSFetchRequest *fetchRequest = [NSFetchRequest fetchRequestWithEntityName:@"Foo"];
[fetchRequest setPredicate:[NSPredicate predicateWithFormat:@"SELF.bar == %@",
                            [bar objectID]]];

NSPersistentStoreCoordinator *persistentStoreCoordinator = ...;
[[NSBlockOperation blockOperationWithBlock:^{
    NSManagedObjectContext *managedObjectContext = [NSManagedObjectContext new];
    [managedObjectContext setPersistentStoreCoordinator:persistentStoreCoordinator];
    NSArray *foos = [managedObjectContext executeFetchRequest:fetchRequest
                                                        error:NULL];
}] start];
4

1 回答 1

1

我在iOS 5的 CoreData 发行说明中找到了一些示例代码,几乎可以做到这一点,所以看起来还不错。

NSFetchRequest *fr = [NSFetchRequest fetchRequestWithEntityName:@"Entity"];
__block NSUInteger rCount = 0;

[context performBlockAndWait:^() {
    NSError *error;
    rCount = [context countForFetchRequest:fr error:&error];
    if (rCount == NSNotFound) {
        // Handle the error.
    }
}];

NSLog(@"Retrieved %d items", (int)rCount);
于 2012-10-31T19:35:18.747 回答