繁体   English   中英

核心数据表到NSArray

[英]Core Data table to NSArray

我有以下从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");

        }
    }

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

谢谢。

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”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM