更改NSString的值

时间:2013-08-27 03:09:26

标签: objective-c cocoa-touch nsstring

我在更改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时更改内容。

2 个答案:

答案 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

(另外,请提供您在崩溃时获得的实际错误,而不是仅仅说'它崩溃'。)