NSFetchRequest有时仅返回结果

NSFetchRequest有时仅返回结果

我正在回答关于这个问题的自己的问题。在我看到尽可能多的其他答案之前,我不会接受它。

在过去的几天里,我一直在努力使用以下代码

- (id)fetchUniqueEntity:(Class)entityClass
              withValue:(id)value
            fromContext:(NSManagedObjectContext *)context
            insertIfNil:(BOOL)insertIfNil {
    if(!value) {
        return nil;
    }

    NSString *entityUniqueIdentifierKey = [entityClass performSelector:@selector(uniqueIdentifierKey)];
    NSPredicate *predicate = [NSPredicate predicateWithFormat:@"%K == %@", entityUniqueIdentifierKey, value];

    NSArray *entities = [self fetchEntities:entityClass
                              withPredicate:predicate
                                fromContext:context];

    if(!entities || [entities count] == 0) {
        if (insertIfNil) {
            return [entityClass performSelector:@selector(insertInManagedObjectContext:)
                                     withObject:context];
        }
    } else {
        return [entities objectAtIndex:0];
    }

    return nil;
}

- (NSArray *)fetchEntities:(Class)entityClass
             withPredicate:(NSPredicate *)predicate
               fromContext:(NSManagedObjectContext *)context {
    NSFetchRequest *request = [[NSFetchRequest alloc] init];
    NSString *entityName = [entityClass performSelector:@selector(entityName)];
    [request setEntity:[NSEntityDescription entityForName:entityName
                                   inManagedObjectContext:context]];
    if(predicate) {
        [request setPredicate:predicate];
    }

    NSError *error;
    NSArray *entities = [context executeFetchRequest:request
                                               error:&error];

    if(error) {
        NSLog(@"Error executing fetch request for %@! \n\n%@", entityName, error);
    }

    return entities;
}

顶级帮助程序方法旨在在大型下载过程中帮助建立关系。我遇到的问题是,即使说持久存储中存在一个AccountaccountId1对象(已确认),也只能在一半时间内检索该对象。老实说,我不能解释为什么。有任何想法吗?

最佳答案

经过大量的调试和反复试验后,我发现将谓词格式从

[NSPredicate predicateWithFormat:@"%K == %@", entityUniqueIdentifierKey, value];


[NSPredicate predicateWithFormat:@"%K == %d", entityUniqueIdentifierKey, [value intValue]];

解决了问题。在研究了苹果文档之后,似乎%@应该可以工作了。所以我不是100%知道为什么这可以解决问题。

关于ios - NSFetchRequest有时仅返回结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24158618/

10-13 03:49