Как создать общие свойства типа идентификатора? - PullRequest
0 голосов
/ 17 января 2011

Я новичок в iOS и Objective-C и пытаюсь создать класс с универсальным свойством.

@interface HeaderInfo : NSObject { NSString *label; id value; }</p> <pre><code>@property (nonatomic, retain) NSString *label; @property (nonatomic, retain) id value; - (HeaderInfo *)initWithLabel:(NSString *)lbl value:(id)val; @end

ЗатемЯ пытаюсь добавить этот класс в массив:

[generalSection.items addObject:[[HeaderInfo alloc] initWithLabel:@"Tacho seal security" value:@"Some String Value"]];</p> <p>[generalSection.items addObject:[[HeaderInfo alloc] initWithLabel:@"Tacho seal security" value:YES]];

, но компилятору не нравится 2-е дополнение, и он говорит:

Warning: passing argument 2 of 'initWithLabel:value:' makes pointer from integer without a cast

Что я делаю не так?Любая помощь очень ценится.

А также как можно проверить значение позже, будь то BOOL или NSString?

Спасибо.

1 Ответ

2 голосов
/ 17 января 2011

Тип BOOL не является объектом, поэтому вы не можете передать его как id (универсальный объект).

Вы должны передать NSNumber.NSNumber - это объект, который инкапсулирует числа, когда вы хотите передать число как объект.

Вы можете создать NSNumber следующим образом: [NSNumber numberWithBool:YES];

Вы можете получить значение с помощью[value boolValue];

Если вы хотите проверить тип объекта, который у вас есть во время выполнения, вы можете использовать его следующим образом:

if ([value isKindOfClass:[NSNumber class]]) {
   //It's a number
}
else if ([value isKindOfClass:[NSString class]]) {
   //It's a string
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...