【问题标题】:Core Data table to NSArray核心数据表到 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");

        }
    }

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

谢谢。

【问题讨论】:

    标签: iphone ios core-data core-data-migration ticoredatasync


    【解决方案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”上的指定初始化程序
    • 已解决:数组无法使用:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-01-22
    • 1970-01-01
    • 2011-04-25
    • 2014-03-09
    • 1970-01-01
    相关资源
    最近更新 更多