Получение строкового значения из NSArray - PullRequest
5 голосов
/ 15 января 2010

У меня есть NSArrayController, и я, когда я получаю selectedObjects и создаю строку NSString со значением valueForKey:@"Name", возвращается

(
    "This is still a work in progress "
)

и все, что я хочу, - это текст в "", как бы я это получил? также это мой код:

NSArray *arrayWithSelectedObjects = [[NSArray alloc] initWithArray:[arrayController selectedObjects]];

NSString *nameFromArray = [NSString stringWithFormat:@"%@", [arrayWithSelectedObjects valueForKey:@"Name"]];
NSLog(@"%@", nameFromArray);

Редактировать : у меня также есть другие строки в массиве

1 Ответ

16 голосов
/ 15 января 2010

Когда вы вызываете valueForKey: для массива, он вызывает valueForKey: для каждого из элементов, содержащихся в массиве, и возвращает эти значения в новом массиве, подставляя NSNull для любых значений nil. Также нет необходимости дублировать массив selectedObjects с контроллера, так как он в любом случае неизменен.

Если у вас есть несколько объектов в выбранных объектах контроллера массива, и вы хотите увидеть значение ключа имени всех элементов в выбранных объектах, просто выполните:


NSArray *names = [[arrayController selectedObjects] valueForKey:@"name"];

for (id name in names)
    NSLog (@"%@", name);

Конечно, вы можете распечатать их все сразу, если вы сделали:

NSLog (@"%@", [[arrayController selectedObjects] valueForKey:@"name"]);

Если в массиве selectedObjects есть только один элемент и вы вызываете valueForKey:, он все равно будет возвращать массив, но он будет содержать только значение ключа одиночного элемента в массиве. Вы можете сослаться на это с помощью lastObject.

NSString *theName = [[[arrayController selectedObjects] valueForKey:@"name"] lastObject];
NSLog (@"%@", theName);
...