1

还有一个 C#/.NET 人试图学习 Objective-C,并梦想通过 iPhone 应用赚取数百万美元 :)

好的,我确定这个问题源于我非常习惯于静态类型语言,因此很难调整,但这是我的问题。假设我有一个名为 MyObect 的类:

我的对象.h

@interface MyObject : NSObject
{

}

-(void)Foo;

@end

我的对象.m

#import "MyObject.h"
@implementation MyObject

-(void)Foo
{
  //do something fooey
}

@end

现在我试图弄乱这些对象的 NSMutableArray ,所以在我的主要内容中,我填充了这些对象的数组,如下所示:

NSMutableArray *array = [[NSMutableArray alloc] init];
for(int i = 0; i<10;i++)
{
   MyObject *obj = [[MyObject alloc]init];
   [array addObject:obj];
}

没有什么花哨。然而,现在我试图取出数组的第一个,并调用 foo 方法。所以,这就是我感到困惑的地方。我试过这个:

MyObject *obj = [array objectAtIndex:1];
[obj Foo];

虽然这可行,但我收到了 MyObject 可能无法响应 message 的警告。所以,我想,好吧,让我投吧:

MyObject *obj = (MyObject *)[array objectAtIndex:1];
[obj Foo];

这也给了我警告。

我想我的问题是关于如何将项目存储在集合中以及如何将它们拉出并仍然保留对象类型的基本问题。同样,我来自 .NET 背景,所以我的想法可能存在根本缺陷,所以如果有人能指出我正确的方向,我将不胜感激。

编辑:我的原始代码实际上在演员表中有星号(没有它你会得到一个编译错误)。它仍然显示警告...

4

3 回答 3

1

将铸造线更改为:

MyObject *obj = (MyObject *)[array objectAtIndex:1];

缺失*就是问题所在。

于 2009-06-30T14:49:34.290 回答
1

这不应该发出警告,因为您在对另一个答案的评论中包含星号。事实上,我认为演员表是不必要的——即使没有演员表的版本也不应该给出警告。

确保头文件 MyObject.h 在您尝试调用方法的文件的开头是#imported。您收到的警告是典型的情况,您已经前向声明了一个类,@class MyObject但没有包含带有#import "MyObject.h".

顺便说一句,在 Objective-C 中,方法名称通常以小写字母开头,就像在 Java 中一样。

于 2009-06-30T14:55:19.130 回答
1

好的,我现在觉得自己像个白痴:(我忘了将方法声明添加到头文件中。你们俩一直强调我需要确保我正在导入头文件,这让我意识到这一点. 谢谢你们俩的帮助。

于 2009-06-30T15:13:02.107 回答