我在更改NSString的值时遇到了问题。
在我的班级中声明如下:
@property (strong, nonatomic)NSMutableString *votes;
创建对象时,它设置如下:
song.votes = [dict objectForKey:@"Votes"];
最后是麻烦发生的地方。稍后在我的代码中,我尝试修改这样的值:
song.votes =[responseArr valueForKey:@"CNT"];
此行导致此次崩溃:
'NSInvalidArgumentException',原因:' - [__ NSCFString setVotes]: 无法识别的选择器发送到实例0x14f84430'
我认为我的问题是由以下原因引起的:
1.错误地设置上面的属性。我已经尝试将其设置为(copy, nonatomic)
,但它也做同样的事情。
2.我需要为此使用NSMutableString。我尝试将其更改为NSMutableString但它在更改时仍然崩溃(不可否认我正在使用NSMutableString进行初始化和更改方式,我不完全确定如何在Mutable时更改内容。
答案 0 :(得分:1)
我认为问题在于您分配/设置song
对象的方式。在设置第一个和第二个值之间,您可能会释放song
然后尝试设置它的属性,或者您正在修改它,使其不再是相同的类类型。
unrecognized selector sent to instance 0x14f84430'
几乎总结了你。第二次尝试设置votes
属性时,它会尝试从setVotes
访问合成的setter(song
),这不再是您认为的类。
从错误看起来您可能正在重新分配song
作为NSString对象。这就是为什么它试图在setVotes
上访问NSString
方法并且这样的方法不存在,因此它会瘫痪并崩溃。
你确定你没有做song = [someString retain];
之类的事情吗?
答案 1 :(得分:1)
如果您需要-mutableCopy
的可变副本,请使用NSString
。
song.votes = [[dict objectForKey:@"Votes"] mutableCopy];
假设responseArr
是一个数组,[responseArr valueForKey:@"CNT"]
返回一个数组,其中包含responseArr
中每个实例的返回值。您的属性适用于NSMutableString
,但您将其设置为NSArray
。
(另外,请提供您在崩溃时获得的实际错误,而不是仅仅说'它崩溃'。)