【问题标题】:How to reference a function from one .m file in another?如何从一个.m 文件中引用另一个函数?
【发布时间】:2010-09-23 18:42:24
【问题描述】:

这是一个新手问题,但我似乎无法在任何地方找到它。我在一组 .h/.m 文件中定义了一个类,并有一个单独的 .h/.m 用于绘图。我想做的是从这个类中创建一个对象数组,并将它们按顺序绘制到屏幕上。

当然,我收到了'squares' undeclared (first use in this function) 错误。转了一圈,重复了很多代码,才承认自己不知道怎么做,就到这里求助了。

在一个 .h 文件中: @interface DrawerViewController : UIViewController {
NSMutableArray *squares;
}
@property (nonatomic, retain) NSMutableArray *squares;
@end

在相应的.m中: squares = [[NSMutableArray alloc] init];

在另一个 .m 文件中,我想访问“squares”数组:

if ([squares objectAtIndex:thisID] != NULL) {

这就是我得到错误的地方:"squares" undeclared. 我正在使用include 来引入另一个 .h 文件,但这似乎不起作用。

如果有人能指出我正确的方向,我将非常感激......

【问题讨论】:

    标签: objective-c class file nsmutablearray compiler-errors


    【解决方案1】:

    'squares' 属性是另一个对象的成员,因此您不能直接向它发送消息。在第二个 .m 文件中,创建 DrawerViewController 类型的对象并调用“if ([[myDrawerViewController squares] objectAtIbdex: thisId])”。如果您已#included 应该可以正常编译的其他文件。本质上,您在那里嵌套了两个消息调用...第一个检索 squares 属性,第二个向该属性发送一条消息,请求数组成员。

    【讨论】:

    • 嗯,我收到了'DrawerViewController' may not respond to '+squares'。我错过了一步吗?对不起...
    • 是的,你不要求[DrawerViewController squares],因为这会给你你看到的错误,你需要实例化一个DrawerViewController类型的对象,称为(例如)myDrawerViewController ,然后按照@samkass 说的做。从这个意义上说,Objective C 与 Java 或 C++ 没有什么不同——你需要调用一个对象的方法。
    • (在实现DrawerViewController 时,您还需要一个@synthesize squares;。这 ObjC 独有的。)
    • 啊!谢谢 samkass 和 Echelon,我现在明白了!
    • 如果我可以回到这个并用新手语言重新表述:您不能将消息发送到另一个“物理”文件,即DrawerViewController。相反,您需要在当前类中创建一个指向其中的指针并向其发送消息。 (我敢肯定,对于任何有 CS 背景的人来说,这都是非常明显的,但我是从 Processing 来到 Obj-C 的,所有这一切都得到了处理,营地辅导员会在晚上帮我们补课。)跨度>
    猜你喜欢
    • 1970-01-01
    • 2016-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多