首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在iPhone的子视图中设置objective-c中的ivar

在iPhone的子视图中设置objective-c中的ivar
EN

Stack Overflow用户
提问于 2010-03-31 17:19:14
回答 1查看 389关注 0票数 0

也许在这个网站上有一个常见问题。

我有一个保存表单的TableViewController。在表单中,我有两个字段(每个字段都在自己单元格中):一个字段用于选择谁支付了费用(单选),另一个字段用于选择支付了费用的人员(多选)。

这两个字段都会打开一个包含在UINavigationController中的新TableViewController。

单选字段(付款人)保存一个对象成员身份多个选择字段(付钱)保存一个对象NSMutableArray

这两个变量以相同的方式发送到新的控制器:

代码语言:javascript
代码运行次数:0
运行
复制
mySingleSelectController.crSelectedMember = self.crPaidByMember;
myMultipleSelectController.crSelectedMembers = self.crSelectedMembers;

在Paid控制器中,我使用didSelectAtIndexPath方法设置一个可变的成员资格数组,这些成员资格是为谁付费的:

代码语言:javascript
代码运行次数:0
运行
复制
 if ([[tableView cellForRowAtIndexPath:indexPath] accessoryType] == UITableViewCellAccessoryCheckmark) {
  [self.crSelectedMembers removeObject:[self.crGroupMembers objectAtIndex:indexPath.row]];
  //...
 }
 else {
  [self.crSelectedMembers addObject:[self.crGroupMembers objectAtIndex:indexPath.row]];
  //...
 }

到目前为止,一切都很顺利。可变数组(crSelectedMembers)是从子视图中完美设置的。但是..。我在设置成员资格对象时遇到问题。

通过控制器付费,我使用didSelectAtIndexPath来设置成员资格:

代码语言:javascript
代码运行次数:0
运行
复制
[self setCrSelectedMember:[crGroupMembers objectAtIndex:indexPath.row]];

通过NSlogging crSelectedMember,我在self中获得了正确选择的成员,但在ivar指向的父视图中,没有任何更改。

我做错了什么吗?因为我可以调用crSelectedMembers的方法,但不能更改crSelectedMember的值。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-03-31 20:41:01

如果我理解你的问题,最有可能的原因是不正确的属性声明。

如果要使用每个对象的属性将值从一个对象传递到另一个对象,则需要确保使用assign来确保一个对象中的属性与另一个对象中的属性指向相同的实例。

所以在你的topViewController中你有一个属性:

代码语言:javascript
代码运行次数:0
运行
复制
@property (nonatomic,retain) NSString crSelectedMember;

然后在你的子视图控制器中,你有:

代码语言:javascript
代码运行次数:0
运行
复制
@property (nonatomic,assign) NSString crSelectedMember;

这会强制将值放入父控制器中的确切对象中。

然而,这是在viewControllers之间传递数据的一种非常脆弱的方式。随着您的应用程序变得越来越复杂,跟踪所有传递的数据将是不可能的。(更糟糕的是,如果遇到内存限制,当您尝试向父视图控制器传递数据时,它可能会卸载甚至不存在。)

相反,您应该有一个专门用于保存数据的自定义对象。每个视图控制器都应该查询该对象以获取它需要的数据,并且应该将任何更改写回该对象。视图控制器从不直接通信。这种技术允许您在一个特定的位置控制数据,而不是将其分散到代码中,并且它具有很好的伸缩性。您可以将任意数量的视图控制器添加到您的应用程序中,而不必担心将它们全部捆绑在一起。

有关详细信息,请参阅本文:iPhone: How to Pass Data Between Several Viewcontrollers in a Tabbar App

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2551699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档