核心数据表到 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