Sen*_*ful 8 c arrays cocoa objective-c nsdictionary
我找不到该方法的工作示例[NSDictionary getObjects:andKeys:].我能找到的唯一例子,没有编译.我提供了错误/警告,以防有人搜索它们.
我感到困惑的原因是因为NSDictionary上的大多数方法都返回了NSArray.但是,在文档中,它声明此方法的out变量作为C数组返回.
以下是您按照链接示例可能获得的错误消息/警告:
NSDictionary *myDictionary = ...;
id objects[]; // Error: Array size missing in 'objects'
id keys[]; // Error: Array size missing in 'keys'
[myDictionary getObjects:&objects andKeys:&keys];
for (int i = 0; i < count; i++) {
id obj = objects[i];
id key = keys[i];
}
Run Code Online (Sandbox Code Playgroud)
.
NSDictionary *myDictionary = ...;
NSInteger count = [myDictionary count];
id objects[count];
id keys[count];
[myDictionary getObjects:&objects andKeys:&keys]; // Warning: Passing argument 1 of 'getObjects:andKeys:' from incompatible pointer type.
for (int i = 0; i < count; i++) {
id obj = objects[i];
id key = keys[i];
}
Run Code Online (Sandbox Code Playgroud)
我将提供一个有效的解决方案作为这个问题的答案.
Sen*_*ful 13
以下是使用此方法的正确方法:
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil];
NSInteger count = [myDictionary count];
id objects[count];
id keys[count];
[myDictionary getObjects:objects andKeys:keys];
for (int i = 0; i < count; i++) {
id obj = objects[i];
id key = keys[i];
NSLog(@"%@ -> %@", obj, key);
}
Run Code Online (Sandbox Code Playgroud)
在ARC下,解决方案需要修改如下(__unsafe_unretained添加到数组定义中):
NSDictionary *myDictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"1", @"A", @"2", @"B", nil];
NSInteger count = [myDictionary count];
id __unsafe_unretained objects[count];
id __unsafe_unretained keys[count];
[myDictionary getObjects:objects andKeys:keys];
for (int i = 0; i < count; i++) {
id obj = objects[i];
id key = keys[i];
NSLog(@"%@ -> %@", obj, key);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10771 次 |
| 最近记录: |