получение строки в NSMutableArray: почему это не работает? - PullRequest
2 голосов
/ 30 июля 2009

У меня ошибка - [NSCFString stringValue]: нераспознанный селектор отправляется экземпляру 0x1578c при выполнении этого кода Я не понимаю что я делаю не так имя NSString

self.searchValues= [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
   [searchValues addObject: [NSMutableDictionary dictionaryWithObjectsAndKeys:@"Name",@"Label",self.name,@"Value",nil]];
NSLog(@"Array value : %s",[[[searchValues objectAtIndex:0] objectForKey:@"Value"] stringValue]);

Ответы [ 4 ]

3 голосов
/ 30 июля 2009

Во-первых, вы можете удалить сообщение [... stringValue]. Не обязательно, этот объект уже является строкой. Во-вторых, вы должны использовать% @ вместо% s для объектов NSString.

Примечание:% @ вообще работает для любого объекта. Попробуйте

NSLog(@"Array: %@", searchValues);

Поверь мне, стоит попробовать.

2 голосов
/ 30 июля 2009

В NSString нет метода "stringValue", поэтому ошибка.

Если вы действительно хотите получить значение в виде C-строки, вам нужен метод UTF8String. Однако для вашего случая регистрации вы должны просто изменить% s на% @ и напрямую зарегистрировать объект NSString.

1 голос
/ 30 июля 2009

Нет необходимости использовать stringValue в этом случае ( edit: на самом деле это ошибка, как сообщали другие, поскольку NSString не имеет stringValue метода). 1006 *

Объект, который выходит из вашего словаря, уже является NSString. Что вы должны сделать, это позволить функции NSLog обрабатывать объект как правильный объект какао. Код для этого %@, а не %s, поскольку %s для строк в стиле C.

Вот как это должно выглядеть:

self.searchValues = [[NSMutableArray alloc] init];
name=@"Bob";
if(self.name!=nil)
{
    [searchValues addObject: [NSMutableDictionary
           dictionaryWithObjectsAndKeys:@"Name", @"Label",
                                        self.name,@"Value",
                                       nil]];

    NSLog(@"Array value: %@", [[searchValues objectAtIndex:0]
                                 objectForKey:@"Value"]);
}
0 голосов
/ 10 октября 2012

Если у вас есть свойство для переменной name, тогда используйте self.name при выполнении какой-либо операции с ним, иначе нет смысла объявлять свойство.

...