2010-07-14 1 views
0

У меня есть функция с именем updateTheValue(), которую я вызывал с помощью [self updateTheValue] некоторое время. Недавно произошли две вещи; Я добавил метод, вызывающий метод viewDidLoad(), и он выплюнул предупреждение о том, что мой класс не может ответить на это. Во-вторых, я хочу передать объекты в updateTheValue() как строки, но в основном ints, поэтому я объявил NSObject перейти в метод. Может ли int вписаться в слот NSObject или что я должен использовать вместо этого?iPhone Int с NSObject &/вызывает класс не может ссылаться на себя

я бы отправил их по отдельности, но они, похоже, связаны, так как после обновления updateTheValue(), чтобы принять NSObject каждую ссылку на эту функцию оказывается ошибка, что мой класс «не может ответить на -updateTheValue»

ответ

3

Вы можете сделать свой метод так:

-(void)updateTheValue:(NSObject *)anObject 
// or use -(void)updateTheValue:(id)anObject 
{ 
    if ([anObject isKindOfClass:[NSString class]]) { 
     // Do your string handling here 
    } 
    else if ([anObject isKindOfClass:[NSNumber class]]) { 
     // Do your number handling here 
    } 
} 

Используйте это так:

[self updateTheValue:[NSNumber numberWithInt:42]]; 

я предлагаю делать два различных метода, хотя, т.е. updateTheValueWithInt: и updateTheValueWithString:, что делает его легче читать и понять.

Убедитесь, что перед тем, как использовать их, убедитесь, что подпись метода видима, чтобы компилятор знал, что это делает.

Если вы используете отдельные методы, вы можете использовать int непосредственно, не обернув их в NSNumber объектов.

+0

Согласен. В Objective-C не нормально создавать методы с аргументами типа 'id', чтобы допускать разрозненные классы. Гораздо чаще существует два разных метода. –

+0

Спасибо! обертка NSNumber отлично работает, и теперь она становится намного проще, поскольку я могу потенциально отправлять строки в экранное текстовое поле, а также целые числа. Мне даже не пришлось разделять типы NSObject, так как мой код может обрабатывать оба. – SeniorShizzle

1

Первая проблема :

updateTheValue() должен быть объявлен, прежде чем пытаться его вызвать.

Вы можете либо переместить определение функции перед вызовами к нему, или добавить прототип в верхней части - например, добавить:

  • (аннулируются) updateTheValue;

наверху.

Вторая проблема:

Используйте NSNumber, например, [NSNumber numberWithInt: 45];