objective-c - 另一个此类对于键 imageView 不符合键值编码

标签 objective-c xcode key sigabrt

<分区>

多年来我一直被这个问题困扰,我浏览了关于堆栈溢出的答案,但它们似乎没有用。我尝试删除所有原始连接,然后再次连接它们,但没有成功。一切编译正常,但我收到此错误:

*** Terminating app due to uncaught exception 'NSUnknownKeyException', reason:   '[<UIApplication 0x6a067d0> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key imageView.'
*** First throw call stack:
(0x11e4052 0x1375d0a 0x11e3f11 0xa4c032 0x9bdf7b 0x9bdeeb 0x9d8d60 0x2cb91a 0x11e5e1a 0x114f821 0x2ca46e 0x2cc010 0xac14a 0xac461 0xab7c0 0xba743 0xbb1f8 0xaeaa9 0x1c84fa9 0x11b81c5 0x111d022 0x111b90a 0x111adb4 0x111accb 0xab2a7 0xaca9b 0x2072 0x1fe5)
terminate called throwing an exception

我还在我的 main.m 中收到“Thread 1 received signal”SIGABRT”消息

0x000ac97f  <+0891>  mov    %eax,(%esp)
0x000ac982  <+0894>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000ac987  <+0899>  mov    %eax,%esi
0x000ac989  <+0901>  mov    0x69940e(%edi),%eax
0x000ac98f  <+0907>  mov    0x68db46(%edi),%ecx
0x000ac995  <+0913>  lea    0x525009(%edi),%edx
0x000ac99b  <+0919>  mov    %edx,0x8(%esp)
0x000ac99f  <+0923>  mov    %ecx,0x4(%esp)
0x000ac9a3  <+0927>  mov    %eax,(%esp)
0x000ac9a6  <+0930>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000ac9ab  <+0935>  mov    0x68df86(%edi),%ecx
0x000ac9b1  <+0941>  mov    %ebx,0x18(%esp)
0x000ac9b5  <+0945>  lea    0x6a6c56(%edi),%edx
0x000ac9bb  <+0951>  mov    %edx,0x14(%esp)
0x000ac9bf  <+0955>  mov    %eax,0xc(%esp)
0x000ac9c3  <+0959>  mov    %esi,0x8(%esp)
0x000ac9c7  <+0963>  mov    %ecx,0x4(%esp)
0x000ac9cb  <+0967>  mov    -0x18(%ebp),%eax
0x000ac9ce  <+0970>  mov    %eax,(%esp)
0x000ac9d1  <+0973>  movl   $0x641,0x10(%esp)
0x000ac9d9  <+0981>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000ac9de  <+0986>  mov    0x699476(%edi),%eax
0x000ac9e4  <+0992>  mov    0x68db72(%edi),%ecx
0x000ac9ea  <+0998>  mov    %ecx,0x4(%esp)
0x000ac9ee  <+1002>  mov    %eax,(%esp)
0x000ac9f1  <+1005>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000ac9f6  <+1010>  mov    0x68df92(%edi),%ecx
0x000ac9fc  <+1016>  mov    %eax,0x8(%esp)
0x000aca00  <+1020>  mov    %ecx,0x4(%esp)
0x000aca04  <+1024>  mov    -0x10(%ebp),%esi
0x000aca07  <+1027>  mov    %esi,(%esp)
0x000aca0a  <+1030>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000aca0f  <+1035>  mov    0x6d0fbe(%edi),%ebx
0x000aca15  <+1041>  test   %al,%al
0x000aca17  <+1043>  je     0xaca2c <UIApplicationMain+1064>
0x000aca19  <+1045>  mov    0x68dbb6(%edi),%eax
0x000aca1f  <+1051>  mov    %ebx,0x8(%esp)
0x000aca23  <+1055>  mov    %eax,0x4(%esp)
0x000aca27  <+1059>  mov    %ebx,(%esp)
0x000aca2a  <+1062>  jmp    0xaca69 <UIApplicationMain+1125>
0x000aca2c  <+1064>  mov    0x68dc0a(%edi),%eax
0x000aca32  <+1070>  mov    %eax,0x4(%esp)
0x000aca36  <+1074>  mov    %esi,(%esp)
0x000aca39  <+1077>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000aca3e  <+1082>  mov    0x68dcba(%edi),%ecx
0x000aca44  <+1088>  mov    %ecx,0x4(%esp)
0x000aca48  <+1092>  mov    %eax,(%esp)
0x000aca4b  <+1095>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000aca50  <+1100>  mov    0x68df96(%edi),%ecx
0x000aca56  <+1106>  mov    %eax,0x8(%esp)
0x000aca5a  <+1110>  mov    %ecx,0x4(%esp)
0x000aca5e  <+1114>  mov    %ebx,(%esp)
0x000aca61  <+1117>  movl   $0x1,0xc(%esp)
0x000aca69  <+1125>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000aca6e  <+1130>  mov    0x68db22(%edi),%eax
0x000aca74  <+1136>  mov    %eax,0x4(%esp)
0x000aca78  <+1140>  mov    -0x14(%ebp),%eax
0x000aca7b  <+1143>  mov    %eax,(%esp)
0x000aca7e  <+1146>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000aca83  <+1151>  mov    0x6d0fbe(%edi),%eax
0x000aca89  <+1157>  mov    0x68df9a(%edi),%ecx
0x000aca8f  <+1163>  mov    %ecx,0x4(%esp)
0x000aca93  <+1167>  mov    %eax,(%esp)
0x000aca96  <+1170>  call   0x5478b2 <dyld_stub_objc_msgSend>
0x000aca9b  <+1175>  xor    %eax,%eax
0x000aca9d  <+1177>  add    $0x2c,%esp
0x000acaa0  <+1180>  pop    %esi
0x000acaa1  <+1181>  pop    %edi
0x000acaa2  <+1182>  pop    %ebx
0x000acaa3  <+1183>  pop    %ebp
0x000acaa4  <+1184>  ret

这是我的 xib 的图片,File Owner 自定义类设置为 ViewController,就像它应该的那样。

http://i.imgur.com/aqFo9.png

拜托,我真的需要这方面的帮助,这已经发生了几天了。我从头开始重新制作了这个项目,但运气不佳。如果需要,我可以提供我的 ViewController.h 和 ViewController.m 代码。我将 imageView 声明为“@property (nonatomic, retain) IBOutlet UIImageView *imageView;”

帮助将不胜感激。我对使用 Objective C 和 Xcode 进行编程还是很陌生。

这是 ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIImagePickerControllerDelegate,   UINavigationControllerDelegate>

{

BOOL newMedia;

}

@property (nonatomic, retain) IBOutlet UIImageView *imageView;

- (IBAction) useCamera;
- (IBAction) useCameraRoll;

@end

这是 ViewController.m:

#import "ViewController.h"
#import "MobileCoreServices/UTCoreTypes.h"

@implementation ViewController

@synthesize imageView;

- (void)didReceiveMemoryWarning
{
    [super didReceiveMemoryWarning];
    // Release any cached data, images, etc that aren't in use.
}

#pragma mark - View lifecycle

- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
}

- (void)viewDidUnload
{
[super viewDidUnload];
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
}

- (void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:animated];
}

- (void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated
{
[super viewDidDisappear:animated];
}

- (BOOL)shouldAutorotateToInterfaceOrientation: (UIInterfaceOrientation)interfaceOrientation
{
// Return YES for supported orientations
if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
    return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown);
} else {
    return YES;
}
}

-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingMediaWithInfo:(NSDictionary *)info
{
NSString *mediaType = [info objectForKey:UIImagePickerControllerMediaType];

[self dismissModalViewControllerAnimated:YES];

if ([mediaType isEqualToString:(NSString *)kUTTypeImage]) {
    UIImage *image = [info 
                      objectForKey:UIImagePickerControllerOriginalImage];

    imageView.image = image;

    if (newMedia)
        UIImageWriteToSavedPhotosAlbum(image, 
                                       self,
                                         @selector(image:finishedSavingWithError:contextInfo:),
                                       nil);
}
else if ([mediaType isEqualToString:(NSString *)kUTTypeMovie])
{
    // Code here to support video if enabled
}
}

-(void)image:(UIImage *)image
finishedSavingWithError:(NSError *)error 
 contextInfo:(void *)contextInfo
{
if (error) {
    UIAlertView *alert = [[UIAlertView alloc]
                          initWithTitle: @"Save failed"
                          message: @"Failed to save image"
                          delegate: nil
                          cancelButtonTitle:@"OK"
                          otherButtonTitles:nil];
    [alert show];
    [alert release];
}
}


-(void)imagePickerControllerDidCancel:(UIImagePickerController *)picker
{
[self dismissModalViewControllerAnimated:YES];
}

- (IBAction) useCamera

{
if ([UIImagePickerController isSourceTypeAvailable:
     UIImagePickerControllerSourceTypeCamera])
{
    NSLog(@"you reached here for camera");

    UIImagePickerController *imagePicker =
    [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = 
    UIImagePickerControllerSourceTypeCamera;
    imagePicker.mediaTypes = [NSArray arrayWithObjects:
                              (NSString *) kUTTypeImage,
                              nil];
    imagePicker.allowsEditing = NO;
    [self presentModalViewController:imagePicker animated:YES];
    [imagePicker release];
    newMedia = YES;
}



}


- (IBAction) useCameraRoll

{
    if ([UIImagePickerController isSourceTypeAvailable:
         UIImagePickerControllerSourceTypeSavedPhotosAlbum])
{
    NSLog(@"you reached here for camera roll");

    UIImagePickerController *imagePicker =
    [[UIImagePickerController alloc] init];
    imagePicker.delegate = self;
    imagePicker.sourceType = 
    UIImagePickerControllerSourceTypePhotoLibrary;
    imagePicker.mediaTypes = [NSArray arrayWithObjects:
                              (NSString *) kUTTypeImage,
                              nil];
    imagePicker.allowsEditing = NO;
    [self presentModalViewController:imagePicker animated:YES];
    [imagePicker release];
    newMedia = NO;
}

}






@end

最佳答案

看起来您正在尝试将 XIB 之一中的 imageView socket 连接到 UIApplication 而不是 ViewController。我建议从你连接的地方拔掉 socket ,然后再试一次。确保右键单击 View Controller XIB 的文件所有者并将点从 imageView 拖到 ImageView 对象。

更新:

查看了您发布的项目后,我明白了您的问题所在。您已在项目设置中将 ViewController 设置为“XIB 主窗口”。删除它,一切都很好。但是,您在 ViewController.xib 中也有一个窗口而不是一个 View 。您在该窗口内有一个 View ,因此只需从该窗口中拉出该 View 并删除该窗口即可。

如果您对“XIB 主窗口”设置感到困惑,那么我将尝试对其进行一些解释。应用启动的方式是以下两种方式之一:

  1. 您将应用委托(delegate)类的名称作为第四个参数传递给 UIApplicationMain。这会实例化一个,然后在 applicationDidFinishLaunchingWithOptions: 方法期间,您需要创建一个窗口,将 View Controller 设置为它的 rootViewController 并使其成为关键且可见。

  2. 您将 nil 作为 UIApplicationMain 中的类名传递,并设置一个主窗口 XIB。这意味着 XIB 已实例化,并且在其中您应该拥有一个应用程序委托(delegate)实例和一个带有 Root View Controller 的窗口。 “文件的所有者”将是一个 UIApplication 实例,您可以将其中的委托(delegate)导出设置为您在 XIB 中拥有的应用程序委托(delegate)对象。然后在 applicationDidFinishLaunchingWithOptions: 中,您只需执行制作 key 和可见步骤。

关于objective-c - 另一个此类对于键 imageView 不符合键值编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9455580/

相关文章:

swift - 在暂停后的 AVAudioPlayer 中,歌曲不会在 Swift 上继续播放

Javascript:编写一个函数,该函数接受一个数组,然后返回一个仅包含唯一数字的数组,仅删除数组

objective-c - iPad 应用程序在 NSOperationQueue 期间卡住

iphone - iPhone SDK 的 Visual Source Safe 等效项是什么?

objective-c - 使用 Xcode 学习 objective-c?

xcode - 为什么我收到此错误无法为模拟器构建应用程序。在 iPhone 11 Pro Max 上启动应用程序时出错?

nhibernate - 复合 id 中的枚举 - 流畅的 NHibernate 1.2

.net - 如何提取使用强名称工具(sn.exe)创建的私钥?

objective-c - Javascript 到 Obj-c 请求.. 将值返回给 Javascript

IOS UICollectionView Register nib for UICollectionViewCell 不工作