【问题标题】:Changing value of a NSString更改 NSString 的值
【发布时间】:2013-08-27 03:09:25
【问题描述】:

我在更改 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 时如何更改。

【问题讨论】:

  • 崩溃时给出的信息是什么?
  • @Tommy - 抱歉,更新了原帖和消息
  • 错误信息指出song 本身就是一个字符串。有什么办法可以发生吗?
  • 是的,你是对的......根据正在以某种方式发生的调试器,目前正在调查。你怎么能从那条消息中看出?
  • 你可以从那条消息中看出,因为它准确地告诉你——你打了一个看起来像[__NSCFString setVotes]的电话。 "__NSCFString" 是 NSString 的内部类名。

标签: objective-c cocoa-touch nsstring


【解决方案1】:

我认为问题在于您分配/设置 song 对象的方式。在设置第一个和第二个值之间的某个位置,您可能正在释放 song,然后尝试设置它的属性,或者您正在修改它以使其不再是相同的类类型。

unrecognized selector sent to instance 0x14f84430' 几乎为您总结了这一点。第二次尝试设置votes 属性时,它会尝试从song 访问合成的setter (setVotes),这不再是您认为的类。

从错误看来,您可能正在将 song 重新分配为 NSString 对象。这就是为什么它试图访问NSString 上的setVotes 方法而这种方法不存在,所以它退出并崩溃。 你确定你没有做类似song = [someString retain]; 的事情吗?

【讨论】:

  • 我的函数搜索一首歌曲并返回它......在某个地方它没有返回歌曲,所以它一直为零......它总是小事!
【解决方案2】:

如果您需要NSString 的可变副本,请使用-mutableCopy

song.votes = [[dict objectForKey:@"Votes"] mutableCopy];

假设responseArr 是一个数组,[responseArr valueForKey:@"CNT"] 返回一个数组,其中包含responseArr 中每个实例的返回值。您的属性适用于 NSMutableString,但您将其设置为 NSArray

(另外,请提供您在崩溃时遇到的实际错误,而不是仅仅说“它崩溃了”。)

【讨论】:

    猜你喜欢
    • 2011-11-19
    • 2010-12-20
    • 1970-01-01
    • 2011-06-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多