可能是一个菜鸟问题,但我现在似乎无法做到这一点。我正在开发一个应用程序,我有一个用于确认一些基本内容的动作表。但是,在为该Actionsheet调用委托之后,我的初始调用对象被释放(或不被启动)。
在委托方法中,我想要在该对象上调用一个方法,但它从那时起就没有做任何事情。
在这种情况下,self.inviteSponsorsFromVC不再启动了,我想从中调用saveSponsorWithEmail方法。我不能只重新启动它,因为对象中有一些对象,它必须使用。
如果我只是删除动作表并直接调用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");
}
}
答案 0 :(得分:0)
我的猜测是,在委托方法中,self.inviteSponsorsFromVC
的内容为nil
。在Objective-C中,当您向nil
发送消息时,消息被忽略(例如,与C ++不同,当您在NULL
对象上调用方法时会发生崩溃)。
作为一项实验,您可以尝试以下任何一项:
self.inviteSponsorsFromVC
设为强引用[self.inviteSponsorsFromVC retain]
无论哪种方式,您需要做的是确保在调用其中的方法之前,self.inviteSponsorsFromVC
中的对象不会被释放。
编辑
属性声明很好,它上面有strong
属性。在InviteSponsorsFrom
类中,尝试添加dealloc
方法并在那里设置断点以查看对象是否已取消分配,以及调用的来源。
- (void) dealloc
{
[super dealloc];
}
还要确保首先创建InviteSponsorsFrom
的实例。我假设您在该类的某个位置有一个初始化程序,您可以在其中设置断点和/或添加NSLog
语句以确保创建该实例。