带有 UIImagePickerController 的 NSException

Posted

技术标签:

【中文标题】带有 UIImagePickerController 的 NSException【英文标题】:NSException with UIImagePickerController 【发布时间】:2014-05-17 12:38:30 【问题描述】:

我正在 Xcode 5 中构建我的第一个 ios 7 iPad 应用程序 - 但我需要一些帮助来解决这个问题。

我正在关注this 教程:

我不太明白作者的意思: “所以打开 testPickerViewController.h,我们要在类引用中添加以下内容。”

UINavigationControllerDelegate, UIImagePickerControllerDelegate>

我在这里得到了我的 view controller.h 文件:

#import "ViewController.h"

@interface DetailViewController : ViewController <UINavigationControllerDelegate, UIImagePickerControllerDelegate>

UIImagePickerController *imgPicker;
IBOutlet UIImageView *customImage;


@property(nonatomic, retain)UIImagePickerController *imgPicker;

@end

我的视图控制器.m 文件:

#import "DetailViewController.h"

@interface DetailViewController ()

@end

@implementation DetailViewController
@synthesize imgPicker, customImage;

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil

self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) 
    // Custom initialization

return self;


- (void)viewDidLoad

[super viewDidLoad];
// Do any additional setup after loading the view.

// Init the image picker
self.imgPicker = [[UIImagePickerController alloc]init];
self.imgPicker.allowsEditing = YES;
self.imgPicker.delegate = self;
self.imgPicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;


- (void)didReceiveMemoryWarning

[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.


/*
#pragma mark - Navigation

// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender

// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.

*/
- (IBAction)AddImage:(id)sender 
// Let the user add an image for the specific subject
[self presentModalViewController:self.imgPicker animated:YES];


-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)img editingInfo:(NSDictionary *)editingInfo 
customImage.image = img;
[[picker parentViewController] dismissModalViewControllerAnimated:YES];


@end

我运行应用程序时没有执行我在顶部写的操作,这导致 main.m 文件中出现 NSException。

我在这里做错了什么?

编辑

main.m

#import <UIKit/UIKit.h>

#import "AppDelegate.h"

int main(int argc, char * argv[])

@autoreleasepool 
    return UIApplicationMain(argc, argv, nil, NSStringFromClass([AppDelegate class]));


编辑

2014-05-17 14:56:47.509 myApp[1424:60b] * 由于未捕获的异常“NSUnknownKeyException”而终止应用程序,原因:“[setValue:forUndefinedKey:]:这个类是不符合关键图像的关键值编码。'

【问题讨论】:

而异常信息是...? 以 NSException 类型的未捕获异常终止 在这种情况下,您是否设置了断点并检查了哪一行导致异常? “终止”,是的,但它也应该告诉你异常的描述。 在哪里?你看,我对 Xcode 完全陌生 :) 【参考方案1】:

在 Interface Builder (IB) 中检查 IBOutlet customImage 的连接,并确保引用插座的名称和 UIImageView 匹配。您可以通过单击 IB 中的 Connection Inspector 进行检查(它是一个圆圈内的小箭头)。

在您发布链接的教程中,IBOutlet UIImageView 声明为 image。我假设您更改了 IBOutlet 的名称并忘记重新连接它。您还可以通过检查属性声明旁边的点是填充还是空来检查IBOutlet customImage 是否已连接。填充 = 已连接,空 = 未连接。

IBOutlet 的属性声明示例:

@property (weak, nonatomic) IBOutlet UIImageView * customImage;

另外,&lt;UINavigationControllerDelegate, UIImagePickerControllerDelegate&gt; 是协议。通过将这些行添加到@interface 声明中,您可以非常简单地声明“我希望我的UIViewController 符合UINavigationControllerDelegateUIImagePickerControllerDelegate。我还想在某些事件发生时实现我自己的代码发生。”

【讨论】:

我检查了链接,它是正确的。我稍微更改了我的 .h 代码,请参阅我的更新 我从 ImageView 中删除了图片链接,突然它起作用了 太棒了。我很高兴现在一切都对你有用。继续阅读教程,你就会掌握窍门。 我一定会的:)谢谢你的帮助!

以上是关于带有 UIImagePickerController 的 NSException的主要内容,如果未能解决你的问题,请参考以下文章

ViewController 生命周期 UINavigationController

如何从 webview 使用 UIImagePickerController

iPhone OS 3.0 中的 UIImagePickerController

iOS开发——打开手机相册,获取图片

如何使用 iphone 中的核心数据将图像存储到 sqlite? [复制]

带有多个链接的 NSAttributedString 的 UILabel,带有行限制,显示尾部截断,带有未见文本的 NSBackgroundColorAttributeName