我最近重构了我的应用程序,以实现命令模式。为此,我试图将所有功能都放入适当的命令类中。除了一个例外,我已经为所有命令成功实现了模式。我有一个名为HarvestPhotoCommand
的命令,它将启动UIImagePickerController
,我想将该命令类用作选择器的委托。似乎很简单,但是由于某种原因,未调用委托方法。
这是我的代码:
//Header file
@interface WSHarvestPhotoCommand : WSCommand
<
UINavigationControllerDelegate,
UIImagePickerControllerDelegate,
MWPhotoBrowserDelegate
>
@end
//From the super class header file:
@property (nonatomic, weak) WSMapViewEngine *mapViewEngine;
//Implementation file
-(void)execute
{
_imagePicker = [[UIImagePickerController alloc] init];
_imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
_imagePicker.delegate = self;
_imagePicker.navigationBar.barStyle = [WSAppSettings sharedSettings].theme.barStyle;
[self.mapViewEngine.mapVC presentViewController:_imagePicker animated:YES completion:nil];
}
#pragma mark - UIImagePickerControllerDelegate
#pragma mark -
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSLog(@"Please hit me!");
}
-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
NSLog(@"Or me!");
}
WSCommand
和NSObject
是self.mapViewEngine
。 self.mapViewEngine.mapVC
是UIViewController
。到目前为止,我已经尝试了两个实验。首先,我在
mapViewEngine
上设置委托协议,并使其成为委托;第二,我对mapVC
做了同样的事情。这两个实验都起作用,这意味着在每个这些类中都调用了委托方法。那证明了我的UIImagePicker
实现是正确的。那么,为什么同样的命令对我的命令类无效?它和
mapViewEngine
都是NSObject,所以我知道这不是问题。我想我可以使mapViewEngine
或mapVC
成为委托,但是这样做的全部原因是为了使我的 class 脱钩。我整夜都在努力解决问题,因此我现在会接受任何想法或建议。 最佳答案
(在我之前的评论中建议)这是一个内存管理问题,正在触发委托回调,但是由于没有强大的指针支持,因此已经释放了委托对象。
正如DisableR指出的那样,委托连接并没有影响对象的保留计数(并且您没有像两年前那样遇到异常,因为委托没有被取消。)
关于ios - 为什么UIImagePickerControllerDelegate方法不触发?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33447753/