我正在使用iPhone而我正在使用导航。
我有RootViewController中的数据列表,并在单击一个单元格时将一个数据传递给detailViewController。像这样,
detailViewController.message = [tableData objectAtIndex:indexPath.row];
我想在detailViewController中修改'message'的内容。这可能吗?
我试过了,但是我得到一个错误,它是不可变对象。我怎样才能做到这一点?有人给我一个提示。谢谢;)
已添加---------------------------------------------- -
确定。我将指出问题。
在detailViewController中,消息被删除NSMutableDictionary * type。
并像这样使用。
NSMutableString *str = [m_message objectForKey:KEY_CONTENT];
[str appendFormat:@"appended!"];
我收到了这条消息。
* 由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'尝试使用appendFormat改变不可变对象:'
我不能只修改它的内容,比如使用指针修改c ++中的数据吗?
答案 0 :(得分:2)
我认为最好为此使用委托模式。创建一个DetailViewControllerDelegate协议,通知其委托更改的消息。有点像:
-(void)detailViewController:(DetailViewController *)controller didChangeMessage:(NSString *)message;
您也可以通过使用可变对象(NSMutableString,NSMutableArray等)直接操作对象,但使用委托可以提高可重用性并使类分离。
修改强>
你的字典是可变的这一事实并不意味着它里面的对象也是可变的。您的字符串str
可能是不可变的。由于NSMutableString是NSString的子类,因此赋值将起作用。你应该确保在字典中放入一个可变字符串,或者使用NSString的mutableCopy方法获取它的可变副本。
答案 1 :(得分:0)
这取决于您传递的对象类型。不可变意味着你无法改变对象。如果您使用NSArray,则必须切换到NSMutableArray。字符串或字典也一样。
答案 2 :(得分:0)
好吧,我想我想通了。 appendFormat的文档说appendFormat用于追加对象,就像使用stringWithFormat时一样。
文件说明:
使用附加字符串形成 NSString的stringWithFormat:方法 列出的参数。
您应该使用appendString来获得所需的结果。