2011-03-03 60 views
0

我正在使用iPhone,我正在使用导航。从detailView修改原始数据?

我有RootViewController中的数据列表,并在单击单元格时将一个数据传递给detailViewController。像这样,

detailViewController.message = [tableData objectAtIndex:indexPath.row]; 

我想在detailViewController中修改'message'的内容。那可能吗?

我试过,但我得到一个错误,它是不可变的对象。我怎样才能做到这一点?有人给我一个提示。谢谢;)

新增------------------------------------------ ------

好的。我会指定问题。

详细说明ViewController,消息是decleared NSMutableDictionary *类型。

并用这样的。

NSMutableString *str = [m_message objectForKey:KEY_CONTENT]; 
[str appendFormat:@"appended!"]; 

而且我已收到此消息。

*终止应用程序由于未捕获的异常“NSInvalidArgumentException”,理由是:“试图改变一个不可改变的对象与appendFormat:”

我不能只是修改它的内容,如使用指针在C修改数据++?

回答

2

我认为最好为此使用委托模式。创建一个DetailViewControllerDelegate协议,通知它的代表已更改的消息。沿着线的东西:

-(void)detailViewController:(DetailViewController *)controller didChangeMessage:(NSString *)message; 

你可以也直接使用可变一个(的NSMutableString,NSMutableArray的等)操纵的对象,但使用委托提高了可重用性和解耦你的类。

编辑:

事实上,你的字典是可变的,并不意味着对象里面是可变的为好。您的字符串str可能是不可变的。由于NSMutableString是NSString的一个子类,所以这个赋值可以工作。你应该确保你在字典中放置了一个可变字符串,或者使用NSString的mutableCopy方法来获取它的可变副本。

+0

+1代表团。 – 2011-03-03 13:43:04

+0

感谢您的回答。但我只是添加了一些关于问题的细节。当然你的回答很有帮助,但我想看另一种方式。 – SeniorLee 2011-03-03 13:53:23

+0

请参阅我的上次编辑以获取有关可变/不可变问题的更多信息。 – Rengers 2011-03-03 15:34:22

0

这取决于你传递什么类型的对象。不可变意味着你不能改变对象。如果您需要使用NSArray,则必须切换到NSMutableArray。字符串或字典相同。

+0

我用MutableDictionary&MutableString。仍然得到不可改变的错误。你能指出我做错了什么吗?我修改了这个问题。请阅读并纠正我。谢谢。 – SeniorLee 2011-03-03 13:54:35

0

好吧,我想我想通了。 appendFormat的文档说appendFormat用于追加对象,就像使用stringWithFormat时一样。

文档状态:方法 与列出的参数:

所附字符串使用 的NSString的stringWithFormat形成。

你应该使用appendString来得到你想要的结果。