核心数据表到 NSArray

Posted

技术标签:

【中文标题】核心数据表到 NSArray【英文标题】:Core Data table to NSArray 【发布时间】:2013-08-21 14:00:16 【问题描述】:

我有以下从Core Data 检索到的Array

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

所以我编写了这段代码来分别获取每行数据以将其发送到 REST API:

for (NSString *str in dataArray) 

        NSString *name =[dataArray valueForKey:@"name"];
        NSString *dob = [dataArray valueForKey:@"dob"];
        int gender =[[dataArray valueForKey:@"gender"]integerValue];
        NSString *childId =[dataArray valueForKey:@"id"];

         int response = [network sendName:name withDateOfBirth:dob andGender:gender forID:childId];

        if (response == 200) 
            // [self performSelectorOnMainThread:@selector(postSuccess) withObject:nil waitUntilDone:YES];
            NSLog(@"Success");

        
    

但它不起作用,因为我不知道数据是如何存储在数组中的每个索引中的!! 请帮忙,如果我没有正确执行此操作,请告诉我更好的方法。

谢谢。

【问题讨论】:

【参考方案1】:
NSString *name =[dataArray valueForKey:@"name"];

这不会做你认为它会做的事。 valueForKey:,当发送到一个数组时,返回一个数组,该数组的值对应于数组中所有项目的给定键。因此,尽管您将name 声明为NSString,但该行将为dataArray 中的所有项目分配一个“名称”值数组。后面几行也是如此。

您可能想要的是:

for (NSManagedObject *item in dataArray) 
    NSString *name = [item valueForKey:@"name"];
    ...

更好的是,如果你有一个 NSManagedObject 子类——我们称之为 Person 代表你请求的实体,你可以说:

for (Person *person in dataArray) 
    NSString *name = person.name;
    ...

这导致了一个更简单的版本:

for (Person *person in dataArray) 
    int response = [network sendName:person.name
                     withDateOfBirth:person.dob
                           andGender:person.gender
                               forID:person.id];

虽然我会更改该方法的名称以省略连词和介词。 -sendName:dateOfBirth:gender:id: 就够了,不需要“with”、“and”、“for”。

【讨论】:

它是否不起作用,应用程序在此行崩溃(NSManagedObject *item in dataArray) @MKAlatrash “它崩溃了”根本没有帮助。为什么会崩溃?控制台中显示什么消息?你的崩溃日志说什么? dataArray 是一个有效的数组吗?它包含什么?你收到来自-executeFetchRequest:error: 的错误了吗? 日志如下:-[_PFArray countByEnumeratingWithState:objects:count:]: 另一个错误:CoreData:错误:无法调用 NSManagedObject 类“Person”上的指定初始化程序 已解决:数组无法使用:)

以上是关于核心数据表到 NSArray的主要内容,如果未能解决你的问题,请参考以下文章

保存到核心数据“ALL 或 ANY 运算符的左侧必须是 NSArray 或 NSSet

带有 NSNumber 的 NSArray 的 NSPredicate(核心数据)

核心数据可转换属性(NSArray)为空

核心数据,将数据加载到 UITextView

如何在核心数据中保存NSArray数据?

使用 NSArray 从 iOS 上的可转换核心数据创建对象