2010-07-14 32 views
0

我有一个叫做updateTheValue()的函数,我现在用[self updateTheValue]调用了一段时间。最近发生了两件事。我在viewDidLoad()方法中添加了调用该方法的方法,并且吐出了一条警告,说我的班级可能不会对此做出响应。其次,我希望像字符串一样将对象传递给updateTheValue(),但主要是ints,所以我声明了一个NSObject传入方法。 int可以放入一个NSObject插槽,或者我应该使用什么?带有NSObject&iPhone类的iPhone Int不能引用它本身

我会已分别公布这些,但他们似乎因为要与更新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'类型的参数创建方法以允许不同的类是不正常的。有两种不同的方法比较常见。 – 2010-07-14 07:56:05

+0

谢谢! NSNumber包装器效果很好,现在它更容易,因为我可以将字符串发送到屏幕上的文本字段以及整数。我甚至没有分开NSObject类型,因为我的代码可以处理两者。 – SeniorShizzle 2010-07-14 08:17:57

1

第一个问题的错误后:

updateTheValue()必须在尝试调用它之前声明。

您可以调用之前移动的功能定义它,或在顶部加入了一个原型 - 例如添加:

  • (无效)updateTheValue;

靠近顶部。

问题二:

使用一个NSNumber,例如[NSNumber的numberWithInt:45];