iOS如何从Array读取值

时间:2012-08-06 19:28:59

标签: objective-c ios ios5 ios4

这是我希望从中获得价值的数组样本。

coursesArray = [[NSMutableArray alloc]init];

// AR111:
[coursesArray addObject:[[NSMutableDictionary alloc] initWithObjectsAndKeys:
                           @"MUR",@"courseType",  
                           @"AR111",@"courseCode",
                           @"Arabic Communication Skills (I)",@"courseName",
                           @"3",@"creditHours",
                           @"",@"preRequisites",
                           @"63.000",@"coursePrice",
                           @"6.000",@"courseEPP",
                           @"This course aims at .",@"courseDetails",
                           nil]];

这是我获取价值的代码。

NSManagedObjectContext *context = [self.fetchedResultsController managedObjectContext];
NSEntityDescription *entity = [[self.fetchedResultsController fetchRequest] entity];

int i = 0;
for (i = 0; i < [coursesArray count] ; i++) {

NSManagedObject *newManagedObject = [NSEntityDescription insertNewObjectForEntityForName:[entity name] inManagedObjectContext:context];

    [newManagedObject setValue:[[coursesArray objectAtIndex: i ]forKey:@"courseName"] forKey:@"courseName"];
}

如果有人可以帮我纠正以下部分:

[newManagedObject setValue:[[coursesArray objectAtIndex: i ]forKey:@"courseName"] forKey:@"courseName"];

这些值将添加到核心数据forKey:@“courseName”。

1 个答案:

答案 0 :(得分:3)

[newManagedObject setValue:[[coursesArray objectAtIndex: i ]forKey:@"courseName"] forKey:@"courseName"];

我认为这是在一行上放置过多代码的经典案例。我不指望这实际上会编译?

让我们尝试将其细分为几个部分。我把代码的中心部分取出来并用XX替换它:

[newManagedObject setValue:XX forKey:@"courseName"];

这一点看起来很好。 setValue:forKey是托管对象的有效方法。

XX是:

[YY forKey:@"courseName"]

目前尚不清楚这是否正确,但看起来不太好 - 方法名称似乎不正确。

YY是:

[coursesArray objectAtIndex:i]

这很好,它返回一个可变字典。但字典不实现名为forKey:的方法。他们实现了一个名为objectForKey:的方法,这就是你想要的。

因此,您的更正行应为:

[newManagedObject setValue:[[coursesArray objectAtIndex:i] objectForKey:@"courseName"] forKey:@"courseName"];

如果您正在编写大量这样的代码,那么具有保存数据成员属性的自定义对象会突然变得更有意义。 forKey:很快就会变得难以理解。