【问题标题】:xcode/objective-c Calling instance methodsxcode/objective-c 调用实例方法
【发布时间】:2012-01-23 20:24:59
【问题描述】:

此问题已解决,感谢您的帮助

所以我试图通过编写一个应用程序并在我需要知道的时候查找我需要知道的内容来自学编写 iphone/ipod 应用程序的 xcode。这个网站可能是最大的帮助,但这次我没能找到我的问题的答案,可能是因为它太简单了,任何有书的人都不能问。

我正在尝试创建一个应用程序,该应用程序将从一副 25 张牌中随机抽取 10 张牌。我创建了一个名为 Dealer 的类,其中包含所有牌和一个数组,其中包含对每张牌的引用作为成员数据,以及从数组中返回卡片并将其删除的方法。这是我的方法代码

- (NSString *)drawDominion
{
    //some code here

    NSString *current = [dominionDeck objectAtIndex:i];

    //more irrelevant code

    return current;
}

然后在我的视图控制器的操作方法中,我创建了我的类的一个对象并尝试调用 drawDominion 但它给了我错误“接收器类型'经销商'例如消息没有声明带有选择器'drawDominion'的方法

- (IBAction) Dominion
{
    Dealer *deal = [[Dealer alloc] init];
    NSString *testStr = [deal drawDominion];
}

这是我尝试调用 drawDominion 的代码。我不知道我在这里做错了什么,我昨天刚拿起 xcode,从那以后一直是一场艰苦的战斗。感谢您提供的任何帮助。

回答您的一些回复: 好吧,我没有制作 Dealer.h,但我在现有的 viewController.h 中有点捎带了它的接口,这会导致我的问题吗?它在已经定义的类的@end 之后开始,看起来像这样。

@interface Dealer : NSObject

-(NSString *) drawDominion:(NSString**)array;
-(NSString *) drawIntrigue:(NSString**)array;
-(NSString *) drawBoth:(NSString**)array;

@end

我想我也忘了将实例变量放在 .h 中,但编译器似乎并没有抱怨这一点。我应该把它们放在那里吗?

【问题讨论】:

  • 你实际上在哪里调用方法来绘制字符串?
  • 您是否在 Dealer.h 文件中声明了该方法?您是否已将 Dealer.h 文件导入您的 viewController?
  • 这段代码应该可以工作,但有很多地方需要检查(初始化程序,gui,...)。您是否尝试记录 testStr
  • 在你的 drawDomain 方法中,确保你做了 [[current retain] autorelease];在您将其从 domainDeck 中删除之前。否则,如果 domainDeck 是最后一个引用该对象的东西,它将被销毁,并且您将返回一个错误的指针。如果您使用 ARC,这不是问题。
  • 很好地将卡从阵列中取出,我只是将其位置设置为 nil。我确信我的代码不是最优雅的方式,但这是我使用 xcode 的第二天。将数组中的位置更改为 nil 不会导致内存泄漏吗?

标签: objective-c class methods instance


【解决方案1】:

您是否已将 drawDominion 方法的原型添加到 Dealer.h 中?你应该有类似的东西

@interface Dealer : NSObject {
  // instance variables here
}
-(NSString*)drawDominion;
@end

在经销商.h 然后,当您#import "Dealer.h" 时,编译器知道 Dealer 将有一个 drawDominion 方法。

【讨论】:

  • 好吧,我没有制作 Dealer.h,但我在现有的 viewController.h 中搭载了它的接口,这会导致我的问题吗?它在已经定义的类的@end 之后开始,看起来像这样。
  • 哎呀,我把那个评论搞砸了,我把答案编辑到我原来​​的帖子里
  • 感谢您的帮助,原来我在更改方法时忘记将参数从 .h 定义中取出。很抱歉浪费了您的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-29
  • 1970-01-01
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多