我正在尝试对NSString进行子类化,以赋予它另一个NSString属性。无论我用@synthesize、@dynamic还是手动编写我的setter和getter,当我编译时都会出现“向实例发送未识别的选择器”错误。
我知道这个问题可能已经有答案了,但在浏览了大约15个此网站上的其他“未识别的选择器”问题后,我仍然不知所措。抱歉,我最近才开始编写代码,所以我可能只是忽略了一些非常简单的东西。
Furigana.h
我知道这个问题可能已经有答案了,但在浏览了大约15个此网站上的其他“未识别的选择器”问题后,我仍然不知所措。抱歉,我最近才开始编写代码,所以我可能只是忽略了一些非常简单的东西。
Furigana.h
@interface Furigana : NSString
@property (strong, nonatomic) NSString *forKanji;
-(void)setForKanji:(NSString *)forKanji; //fails the same with or without this line
@end
Furigana.m
#import "Furigana.h"
@implementation Furigana
@synthesize forKanji = _forKanji;
//@dynamic forKanji; tried this
-(NSString *)forKanji { //also fails when custom setter/getters are left out
if(!_forKanji) _forKanji = [[NSString alloc] init];
return _forKanji;
}
-(void)setForKanji:(NSString *)forKanji {
if(!_forKanji) _forKanji = [[NSString alloc] init];
_forKanji = forKanji;
}
@end
Reibun.m
#import "Furigana.h"
-(NSArray *)parseFurigana:(NSArray *)unparsedData {
NSMutableArray *furigana = [[NSMutableArray alloc] init]; //of Furigana
for(unsigned int x = 0; x < [unparsedData count]; x++){
NSArray *components = [[NSArray alloc] init];
components = [[unparsedData objectAtIndex:x] componentsSeparatedByString:@":"];
Furigana *newFurigana = [[Furigana alloc] init];
newFurigana = [components objectAtIndex:1];
NSLog(@"stored string: %@",newFurigana); //so far so good
newFurigana.forKanji = [components objectAtIndex:0]; //crash
//[newFurigana setForKanji:[components objectAtIndex:0]]; //this fails too
[furigana addObject:newFurigana];
}
return furigana;
}