修改detailView中的原始数据?

时间:2011-03-03 13:26:37

标签: iphone uinavigationcontroller

我正在使用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 ++中的数据吗?

3 个答案:

答案 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来获得所需的结果。