Я не мог найти рабочий пример метода [NSDictionary getObjects:andKeys:]
. Единственный пример, который я мог найти, не компилирует. Я обеспечил ошибки/предупреждения здесь в случае, если кто-то ищет их.
Причина я был смущен, состоит в том, потому что большинство методов на NSDictionary возвращается NSArray
. Однако в документации это указывает, что переменные этого метода возвращаются как 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];
}
.
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];
}
Я предоставлю рабочее решение как ответ на этот вопрос.
Вот правильный способ использования этого метода:
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);
}