Objective c 委托被调用,但调用的viewcontroller被释放
也许这是一个很难回答的问题,但我现在似乎无法回答正确的问题。我正在开发一个应用程序,其中我有一个用于确认一些基本事项的操作表。但是,在为该操作表调用委托后,我的初始调用对象被释放(或未启动) 在委托方法中,我想在该对象上调用一个方法,但它从那一点起就不做任何事情 在这种情况下,self.invitessponsorsFromVC不再启动,我想从中调用saveSponsorWithEmail方法。我不能只是重新初始化它,因为对象中有一些对象,它必须使用 如果我只是删除actionsheet并直接调用saveSponsorWithEmail方法,而不使用委托,那么一切都正常工作 这是我的委托方法:Objective c 委托被调用,但调用的viewcontroller被释放,objective-c,delegates,Objective C,Delegates,也许这是一个很难回答的问题,但我现在似乎无法回答正确的问题。我正在开发一个应用程序,其中我有一个用于确认一些基本事项的操作表。但是,在为该操作表调用委托后,我的初始调用对象被释放(或未启动) 在委托方法中,我想在该对象上调用一个方法,但它从那一点起就不做任何事情 在这种情况下,self.invitessponsorsFromVC不再启动,我想从中调用saveSponsorWithEmail方法。我不能只是重新初始化它,因为对象中有一些对象,它必须使用 如果我只是删除actionsheet并直接调
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex {
//Get the name of the current pressed button
NSString *buttonTitle = [actionSheet buttonTitleAtIndex:buttonIndex];
if ([buttonTitle isEqualToString:NSLocalizedString(@"Send invitation", nil)]) {
ContactFromAddressBook *contactFromAddressBook = [self.tableData objectAtIndex:selectedIndex.row];
[self.inviteSponsorsFromVC saveSponsorWithEmail:contactFromAddressBook.email andName:contactFromAddressBook.fullName];
}
if ([buttonTitle isEqualToString:NSLocalizedString(@"Cancel", nil)]) {
NSLog(@"Cancel pressed --> Cancel ActionSheet");
}
}
我猜在委托方法中,
self.invitersfromvc
的内容是nil
。在ObjtoFeC:C中,当您向- 如果使用ARC,请将属性
作为强引用self.invitessponsorsfromvc
- 如果不使用ARC,请在显示操作表之前的某个时间点说
[self.invitessponsorsfromvc retain]
self.invitessponsorsfromvc
中的对象未解除分配
在评论后编辑 属性声明很好,上面有
strong
属性。在您的invitersponsorsfrom
类中,尝试添加dealloc
方法,并在那里设置断点,以查看对象是否已解除分配,以及调用来自何处
- (void) dealloc
{
[super dealloc];
}
还要确保首先创建了来自的
邀请发起人的实例。我假设您在该类中的某个地方有一个初始值设定项,您可以在其中设置断点和/或添加一个NSLog
语句,以确保创建实例。是否是您作为委托分配的对象在分配时为空?我不确定您的确切意思,但我的操作表将self作为委托。我猜这会创建它的一个新实例,当委托方法被调用时?@Hugo Nope,调用委托方法不会创建一个新实例,它只会在self
引用的实例上调用委托方法。该属性现在声明如下:@property(非原子,强)邀请赞助商来自*邀请赞助商来自VC代码>我想我需要在这里做更多的事情?@Hugo我已经更新了我的答案。我不确定编辑是否通知了您,因此我用以下评论戳您:-)