gpt4 book ai didi

ios - 在 uinavigation 中的 View 之间传递信息

转载 作者:行者123 更新时间:2023-11-28 23:12:17 24 4
gpt4 key购买 nike

我正在实现一个 uinavigationcontroller。第一个 View 是带有姓名列表的 uitableview(想象一下联系人应用程序)。第二个 View 是人员配置文件。所以,当我点击合适的人时,应该会加载他的个人资料。

如何将人员数据传递给第二个 View ?

在 didSelectRowAtIndexPath 中我这样做:

ContactView * varContactView = [[ContactView alloc] initWithNibName:nil bundle:nil];
varContactView.title = [[contactsArray objectAtIndex:indexPath.row] name];
[varContactView initWithPerson:[contactsArray objectAtIndex:indexPath.row]];
[navigationController pushViewController:varContactView animated:YES];

在 ContactView 的界面中我有:

Person * person;

然后:

@property (nonatomic, retain) Person * person;
-(void) initWithPerson:(Person *)newperson;

在 .m 中:

@synthesize person
-(void) initWithPerson:(Person *)newperson{
person = [[Person alloc] init];
person = newperson;
}

但是,当我尝试访问 ContactView 中的人员时,它总是显示 EXC_BAD_ACCESS。

这里有什么问题吗?

最佳答案

代替:

[varContactView initWithPerson:[contactsArray objectAtIndex:indexPath.row]];

你可以简单地使用:

varContactView.person = [contactsArray objectAtIndex:indexPath.row];

这将使用 person 属性 setter 并将给定对象分配为 varContactView 的数据。该 setter 的默认实现是(在 retain 属性的情况下):

- (void)setPerson:(Person *)newPerson
{
if (person != newPerson) {
[person release];
person = [newPerson retain];
}
}

这就是您要在 -initWithPerson: 方法中实现的目标。不需要该方法,因为它的功能由 person 属性 setter 涵盖。顺便说一句,记得在 View Controller 的 -dealloc 方法中释放 person 属性:

- (void)dealloc
{
[person release];
[super dealloc];
}

错误的访问异常可能是由您的代码中的其他内容引起的,但是...

关于ios - 在 uinavigation 中的 View 之间传递信息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7874688/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com