如果executeFetchRequest返回1个类型的项:NSKnownKeysDictionary1而不是managedObjectContext,该怎么办?

时间:2014-05-20 22:38:57

标签: core-data save nsfetchrequest

我有工作代码,它接收更新的Web服务,决定更新或创建新的,但更新不起作用。 (我在这里已经阅读了其他几十个问题,包括我正在关注的一个here。另一个例子是接受的答案here

saveContext:下面执行时没有错误且没有查询(使用Debug level 2)

返回的数组,其中19为所需记录。来自po results

<_PFArray 0xa349280>(
{
    address = "an address";
    companyName = "the Name";
    email = "email@company.com";
    fname = "first name";
    inserted = "2014-05-01 04:00:00 +0000";
    level = 3;
    lname = "last name";
    num = 19;
    phone = "phone #";
    tax2 = "tax number";
}

总结:

  1. 在saveContext
  2. 上没有对Core Data执行任何查询
  3. 调试器或saveContext
  4. 中没有抛出任何错误
  5. 更改未保存到Core Data
  6. results数组是_PFArray
  7. 我认为问题出在existingObject对象上。它没有正确引用managedObjectContext。
  8. saveContext保存数据需要什么?

    **编辑:**我已将其缩小到existObject不正确的类型,但我仍在寻找它不是managedObjectContext的原因。

    这是获取方法。也许这个问题就在这里:

    - (NSArray *)performFetchInEntity:(NSString *)entity withPredicate:(NSString *)predicate {
        NSManagedObjectContext *context = self.managedObjectContext;
    
        // Create the fetch request
        NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
        [fetchRequest setEntity: [NSEntityDescription entityForName:entity
                                             inManagedObjectContext:context]];
    
        // This next line should NOT be used !!!
        // [fetchRequest setResultType:NSDictionaryResultType];
        [fetchRequest setReturnsObjectsAsFaults:NO];
        if (predicate)
            [fetchRequest setPredicate:[NSPredicate predicateWithFormat:predicate]];
    
        // Execute the fetch.
        NSError *error;
        NSArray *result = [context executeFetchRequest:fetchRequest
                                                 error:&error];
    
        NSLog(@"returned: %@", [result objectAtIndex:0]);
        if (!error)
            return result;
        else
            return nil;
    }
    

2 个答案:

答案 0 :(得分:2)

找到了罪魁祸首:

[fetchRequest setResultType:NSDictionaryResultType];

删除该行会导致在结果数组中正确返回类型。

答案 1 :(得分:0)

我遇到了同样的问题。

我收到错误: NSKnownKeysDictionary1 未知对象。

我试图从核心数据中获取对象数组,我在方法中编写了一行代码:

[request setSortDescriptors:[NSArray arrayWithObject:sortByName]];
sortByName =nil;
[request setResultType:NSDictionaryResultType];

我试图使用快速启动从Array获取对象。 这是错误的。 NSKnownKeysDictionary1未知对象。 我删除了

[request setResultType:NSDictionaryResultType];

代码有效。