gpt4 book ai didi

ios - 调用 setter 给出无法识别的选择器错误

转载 作者:搜寻专家 更新时间:2023-10-30 20:17:19 25 4
gpt4 key购买 nike

我正在尝试子类化 NSString 以赋予它一个属性,该属性是另一个 NSString。无论我尝试使用 @synthesize 或 @dynamic 或手动编码我的 setter 和 getter,我在编译时都会收到这个“无法识别的选择器发送到实例”错误。

我知道这可能已经得到解答,但在浏览了本网站上大约 15 个其他“无法识别的选择器”问题后,我仍然不知所措。抱歉,我最近才开始编码,所以我可能只是遗漏了一些非常简单的东西。

注音假名.h

@interface Furigana : NSString

@property (strong, nonatomic) NSString *forKanji;

-(void)setForKanji:(NSString *)forKanji; //fails the same with or without this line

@end

注音假名.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

礼文.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;
}

最佳答案

这是破坏您的代码的行:

newFurigana = [components objectAtIndex:1];

替换您使用 [[Furigana alloc] init] 分配的对象为 NSString 对象,该对象不响应setForKanji: 选择器。

赋值替换了 newFurigana 对象,而不是它的内容。内容无法更改,因为您派生自 NSString,它是不可变的

init 替换为 initWithString,从中调用 [super initWithString:],并使循环内的初始化如下所示:

Furigana *newFurigana = [[Furigana alloc] initWithString:[components objectAtIndex:1]];

关于ios - 调用 setter 给出无法识别的选择器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25222330/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com