【发布时间】: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