Obj-C方法未在同一类中被识别

时间:2009-11-04 07:57:20

标签: objective-c

我有一个有一个方法的课程:

-(NSInteger) getCityCountForState:(NSString *)state CityArray:(NSMutableArray *)cityArray {
NSInteger count = 0;
City *city = [[City alloc] init];

for(city in cityArray)
{
    if (city.state == state)
    {
        count++;
    }
}

return count;
}

从同一类的其他地方调用该方法:

count = [getCityCountForState:state CityArray:appDelegate.cities];

这给出错误“'getCityCountForState'未声明(首次在此函数中使用)”

我也尝试过:

count = [self.getCityCountForState:state CityArray:appDelegate.cities];

这给出了错误“请求成员'getCityCountForState'的东西,而不是结构或联合”

我显然错过了一些明显的东西......但我无法弄清楚它是什么。

5 个答案:

答案 0 :(得分:13)

count = [self getCityCountForState:state CityArray:appDelegate.cities];

通常的Objective-C命名约定会主张重新命名该方法,但至少可以使调用正常工作。

编辑:这是一个开始阅读的好地方:Coding Guidelines for Cocoa。就个人而言,我主张称之为:

- (NSInteger)countCities:(NSArray*)cities forState:(NSString*)state;

答案 1 :(得分:5)

您还应该删除

City *city = [[City alloc] init];

并将City *放入for声明

for (City *city in cityArray)

这会使它变得有点短并消除内存泄漏

答案 2 :(得分:4)

Sixten回答正确,但我想我会指出你的代码有内存泄漏;你不需要[[City alloc] init],因为你是从数组中读出它们而不是在你的逻辑中创建新的。

如果您是obj-c和cocoa的新手,我建议您阅读Memory Management Guide

答案 3 :(得分:4)

Objective-C方法调用语法是:

   [receiver message]

当你写道:

[getCityCountForState:state CityArray:appDelegate.cities]

您试图向CityArray:appDelegate.cities发送getCityCountForState:state条消息。

您应该查看Objective-C语法。阅读Apple对该语言的介绍。

答案 4 :(得分:0)

在标题中声明了-getCityCountForState:CityArray:吗?如果没有,那么定义必须先于用法。