получение строки в NSMutableArray: почему это не работает?
-
05-07-2019 - |
Вопрос
У меня ошибка - [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]);
Решение
Во-первых, вы можете удалить сообщение [... stringValue]. Не обязательно, этот объект уже является строкой. Во-вторых, вы должны использовать% @ вместо% s для объектов NSString.
Примечание:% @ вообще работает для любого объекта. Попробуйте
NSLog(@"Array: %@", searchValues);
Поверь мне, стоит попробовать.
Другие советы
Нет " stringValue " метод на NSString, таким образом, ошибка.
Если вы действительно хотите получить значение в виде C-строки, вам нужен метод UTF8String. Однако для вашего случая регистрации вы должны просто изменить% s на% @ и напрямую зарегистрировать объект NSString.
В этом случае нет необходимости использовать stringValue
( edit: , как сообщают другие, это действительно ошибка, потому что NSString
не имеет метода stringValue
).
Объект, который выходит из вашего словаря, уже является 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"]);
}
Если у вас есть свойство для переменной name, тогда используйте self.name при выполнении какой-либо операции с ним, иначе нет смысла объявлять свойство.