讓我開始說我知道錯誤的含義。基本上說,Selector方法是在沒有該方法的對象上調用的。爲什麼Xcode抱怨「無法識別的選擇器發送到實例」錯誤?
不管怎麼說,這是我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 – Andriko13 2014-10-30 00:51:38
對不起,關於這一點,我沒有返回瓷磚陣列,只是沒有包括它在那裏 – Pangu 2014-10-30 02:29:20
我重新創建情況,但我的代碼使用您提供的相同方法/實現/類可以正常工作。可能這個錯誤可能是由不同於'tile7.healthEffect = 8'的行造成的?如果不是,則錯誤是由您未包含的代碼引起的。我還會根據錯誤消息告訴你這個方法被一個類而不是一個對象調用的可能性檢查tile7的干擾多態性或多個聲明。 – Andriko13 2014-10-30 03:10:36