我有两个数组,即
NMutableArray* first;
NMutableArray* second;
现在我将第一个对象复制到第二个数组,如
for (int i=0;i<first.count; i++)
{
[second addObject:[first objectAtIndex:i];
}
这没关系。我不知道如何访问First Array的值。我试过这个,
[second addObject:[[first objectAtIndex:i]name]];
我想获取第一个数组的第一个对象中的名称值。我尝试使用上面的一行,它显示了一些警告。请帮帮我
答案 0 :(得分:7)
假设你开始使用这样的数组:
NSArray *array1 = @[@{@name : @"Fred"},
@{@name : @"Bill"}];
您可以创建第二个数组,其中包含第一个数组的每个元素的给定属性的值,如下所示:
NSArray *array2 = [array1 valueForKey:@"name"];
如果你然后记录了第二个数组...
NSLog(@"%@", array2);
...结果输出为
2012-04-18 16:26:11.226 ExampleRunner[23320:707] (
Fred,
Bill
)
修改强>
请注意,无论第一个数组中的对象是NSDictionary
的实例(如上例中所示),还是具有name
属性或实例的类或类的实例,这都将起作用变量(或_name
实例变量,就此而言)。有关其工作原理和原因的更多信息,请参阅NSKeyValueCoding
非正式协议的文档:
答案 1 :(得分:3)
括号目前位于错误的位置:
[second addObject:[[first objectAtIndex:i] name]];
答案 2 :(得分:1)
更新后的答案:
同样,我认为你应该把东西分成易于解析的代码行:
for (id theObject in first)
{
// without an actual type, I still think the compiler might
// throw a warning on this next line of code;
// but maybe RJR III is correct and it won't warn.
// I didn't check.
NSString * nameOfObject = [theObject name];
if(nameOfObject)
{
[second addObject:nameOfObject];
}
}
请注意我在这里也做了一些错误检查(即确保名称不是nil)。
原始答案:
您收到警告是因为编译器不知道从您对#34; [first objectAtIndex: i]
&#34;的调用中获取了哪种自定义对象。换句话说,它并不知道你试图获得&#34; name
&#34;&#34; {{1}}&#34;的。
将其投射到正确的类型,然后你就会摆脱警告。
或者甚至更好,将一行多行事件分成两行或三行代码,并使代码在此过程中更具可读性。