【发布时间】:2014-10-30 00:40:52
【问题描述】:
首先让我说我知道错误的含义。这基本上是在没有该方法的对象上调用了 Selector 方法。
无论如何,这是我的 Tile.h 头文件:
#import <Foundation/Foundation.h>
#import "Weapon.h"
#import "Armor.h"
@interface Tile : NSObject
@property (strong, nonatomic) NSString *story;
@property (strong, nonatomic) Weapon *weapon;
@property (strong, nonatomic) Armor *armor;
@property (nonatomic) int healthEffect;
@end
这是我的 Factory.h 头文件:
#import <Foundation/Foundation.h>
@interface Factory : NSObject
- (NSArray *)tiles;
@end
这是我的 Factory.m 文件:
#import "Factory.h"
#import "Tile.h"
@implementation Factory
- (NSArray *) tiles
{
Tile *tile7 = [ [Tile alloc] init];
tile7.story = @"blah blah";
tile7.healthEffect = 8;
}
@end
Factory.m 文件中排除了一些代码,因为它们很简单,但如果我尝试编译和运行,我会收到以下错误:
2014-10-29 17:26:27.944 Pirate Adventure[718:15257]
-[Tile setHealthEffect:]: unrecognized selector sent to instance 0x7b03b8e0
2014-10-29 17:26:27.946 Pirate Adventure[718:15257] *** Terminating app due to uncaught
exception 'NSInvalidArgumentException', reason: '-[Tile setHealthEffect:]: unrecognized
selector sent to instance 0x7b03b8e0'
当我尝试设置 tile7.healthEffect = 8 时它在抱怨;
我什至不明白为什么它会抱怨 setHealthEffect 方法,我什至在我的 Tile.h 头文件中都没有这个定义。另外,healthEffect 只是 tile 对象的一个属性,所以我应该能够将它设置为我想要的任何整数值,而不必定义一个方法来设置正确的值?
我很困惑。
谢谢!
添加 Tile.m 文件:
#import "Tile.h"
@implementation Tile
@synthesize healthEffect = _healthEffect;
@end
【问题讨论】:
-
当我查看您的
tiles方法时,只是一个小问题。您指定了NSArray *的返回类型,但在实际实现中没有返回语句。为了让我们给您答案,您可能需要编辑帖子以包含您实际设置 healthEffect 的代码 -
对不起,我确实返回了tiles数组,只是没有包含在里面
-
我重新创建了您的情况,但我的代码使用您提供的相同方法/实现/类可以正常工作。错误可能是由与
tile7.healthEffect = 8不同的行引起的吗?如果不是,则错误是由您未能包含的代码引起的。我还会根据错误消息告诉您该方法是由类而不是对象调用的可能性来检查 tile7 的干扰多态性或多个声明。
标签: objective-c xcode xcode6