【问题标题】:Two different Entry relationship in core data核心数据中两种不同的Entry关系
【发布时间】:2013-12-07 07:22:56
【问题描述】:

我正在使用具有两个不同实体的核心数据

  1. 用户信息。 - 名字、姓氏、城市等

  2. 电话号码 - 号码

用户信息和电话号码我已经给了很多关系

 -(NSArray*)getAllPhoneBookRecords
 {

// initializing NSFetchRequest
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];

//Setting Entity to be Queried

NSEntityDescription *entity = [NSEntityDescription entityForName:@"userinformation"
                                          inManagedObjectContext:self.managedObjectContext];
[fetchRequest setEntity:entity];

NSError* error;

// Query on managedObjectContext With Generated fetchRequest
NSArray *fetchedRecords = [self.managedObjectContext executeFetchRequest:fetchRequest   error:&error];


for (NSManagedObject *info in fetchedRecords)
{
    NSLog(@"city  name: %@", [info valueForKey:@"city"]);
    NSLog(@"first name: %@", [info valueForKey:@"firstName"]);
    NSLog(@"Last name: %@", [info valueForKey:@"lastName"]);
   NSLog(@"first phonenumber is %@",[info valueForKey:@"number"]);

}

我已经调用了这个方法

AppDelegate* appDelegate = [UIApplication sharedApplication].delegate;

self.managedObjectContext = appDelegate.managedObjectContext;

self.fetchedRecordsArray = [[appDelegate getAllPhoneBookRecords]mutableCopy];

但它只显示第一个表数据,而不是它来

NSLog(@"first phonenumber is %@",[info valueForKey:@"number"]);   

由于未捕获的异常“NSUnknownKeyException”而显示正在终止应用程序,原因:

'[<userinforamtion 0x84691b0> valueForUndefinedKey:]: the entity userinforamtion is not key value coding- compliant for the key "number

但在电话号码实体中,我采用了数字属性

我在用户信息和电话号码之间做错了吗?

【问题讨论】:

    标签: iphone objective-c ipad core-data


    【解决方案1】:

    首先,实体名称通常是 CamelCase。核心数据模型编辑器甚至强制执行此操作,因此您已经很幸运您的代码不会在此处崩溃。

    其次,您应该让 Xcode 创建自定义类并使用它们的访问器。这正是防止未定义键错误的方法。您可以像这样设置和访问属性(也更具可读性):

    NSLog (@"Last name: %@", info.lastName);
    info.lastName = @"Doe";
    

    第三,您应该清楚您通过关系访问的内容。关系本身指向另一个实体的实例。要获得该实体属性,您必须再走一步。

    PhoneNumber *phoneNumber = [info.numbers anyObject];
    NSLog(@"Some phone number: %@", phoneNumber.number;
    

    最后,确保您的属性和关系名称是正确的。例如。如果您与电话号码有一对多关系,则应将InfoPhoneNumber 的关系适当地称为numbers。数字的顺序没有确定,所以你不知道哪个是“第一”。

    也许您想研究是否可以将ABAddressBook 用于您的目的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多