Objective c 委托被调用,但调用的viewcontroller被释放

Objective c 委托被调用,但调用的viewcontroller被释放,objective-c,delegates,Objective C,Delegates,也许这是一个很难回答的问题,但我现在似乎无法回答正确的问题。我正在开发一个应用程序,其中我有一个用于确认一些基本事项的操作表。但是,在为该操作表调用委托后,我的初始调用对象被释放(或未启动) 在委托方法中,我想在该对象上调用一个方法,但它从那一点起就不做任何事情 在这种情况下,self.invitessponsorsFromVC不再启动,我想从中调用saveSponsorWithEmail方法。我不能只是重新初始化它,因为对象中有一些对象,它必须使用 如果我只是删除actionsheet并直接调

也许这是一个很难回答的问题,但我现在似乎无法回答正确的问题。我正在开发一个应用程序,其中我有一个用于确认一些基本事项的操作表。但是,在为该操作表调用委托后,我的初始调用对象被释放(或未启动)

在委托方法中,我想在该对象上调用一个方法,但它从那一点起就不做任何事情

在这种情况下,self.invitessponsorsFromVC不再启动,我想从中调用saveSponsorWithEmail方法。我不能只是重新初始化它,因为对象中有一些对象,它必须使用

如果我只是删除actionsheet并直接调用saveSponsorWithEmail方法,而不使用委托,那么一切都正常工作

这是我的委托方法:

- (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中,当您向nIL/COD>发送消息时,消息被简单地忽略(与C++不同,例如,当您调用一个方法时,在<代码> null < /Cord>对象)处发生崩溃。 作为一项实验,您可以尝试以下任一方法:

  • 如果使用ARC,请将属性
    self.invitessponsorsfromvc
    作为强引用
  • 如果不使用ARC,请在显示操作表之前的某个时间点说
    [self.invitessponsorsfromvc retain]
无论哪种方式,您需要做的是确保在调用其中的方法之前,
self.invitessponsorsfromvc
中的对象未解除分配


在评论后编辑

属性声明很好,上面有
strong
属性。在您的
invitersponsorsfrom
类中,尝试添加
dealloc
方法,并在那里设置断点,以查看对象是否已解除分配,以及调用来自何处

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

还要确保首先创建了来自的
邀请发起人的实例。我假设您在该类中的某个地方有一个初始值设定项,您可以在其中设置断点和/或添加一个
NSLog
语句,以确保创建实例。

是否是您作为委托分配的对象在分配时为空?我不确定您的确切意思,但我的操作表将self作为委托。我猜这会创建它的一个新实例,当委托方法被调用时?@Hugo Nope,调用委托方法不会创建一个新实例,它只会在
self
引用的实例上调用委托方法。该属性现在声明如下:
@property(非原子,强)邀请赞助商来自*邀请赞助商来自VC我想我需要在这里做更多的事情?@Hugo我已经更新了我的答案。我不确定编辑是否通知了您,因此我用以下评论戳您:-)