3

I have been stuck on this problem for ages and I have browsed through the answers on stack overflow but they don't seem to be working. I tried by deleting all the original connections and then connecting them again with no luck. Everything compiles fine but I am getting this error:

*** 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

I am also getting the "Thread 1 received signal "SIGABRT" message in my main.m

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

heres a picture of my xib, the File Owner custom class is set to ViewController like it should be.

https://i.stack.imgur.com/3PIhq.png

Please I really need help on this, it has been happening for a couple of days. I remade the project from scratch and had no luck. I can put up my ViewController.h and ViewController.m code if it is needed. I have imageView declared as "@property (nonatomic, retain) IBOutlet UIImageView *imageView;"

Help would be greatly appreciated. I am still quite new to programming in objective C and Xcode.

here is the ViewController.h:

#import <UIKit/UIKit.h>

@interface ViewController : UIViewController <UIImagePickerControllerDelegate,   UINavigationControllerDelegate>

{

BOOL newMedia;

}

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

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

@end

here is the 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
mattjgalloway
  • 34,792
  • 12
  • 100
  • 110
Cuchullainn
  • 61
  • 1
  • 7
  • Can you include the code where you actually create this view controller? You don't seem to have a main window xib or storyboard so I guess you create it in code? – jrturton Feb 26 '12 at 18:05
  • http://stackoverflow.com/questions/4779561/nsunknownkeyexception – Max Feb 26 '12 at 18:07
  • I don't have a window.xib, I have one called ViewController.xib, I'll put up my ViewController.h and .m up now. – Cuchullainn Feb 26 '12 at 18:09

1 Answers1

6

It looks like you're trying to wire up your imageView outlet in one of your XIBs to the UIApplication rather than your ViewController. I suggest removing the outlet from wherever you've wired it up and trying again. Make sure you right click on the File's Owner of your view controller's XIB and drag the dot from imageView on there to the image view object.

Update:

Having looked at your project you posted, I see exactly what your problem is. You've set ViewController as the "Main Window XIB" in your project settings. Remove that and everything is fine. However, you also have a window in ViewController.xib rather than a view. You have a view inside that window, so just pull out the view from that window and delete the window.

If you're confused by the "Main Window XIB" setting, then I'll try to explain it a bit. The way an app gets kick started is one of two ways:

  1. You pass the name of the class for your app delegate as the fourth parameter to UIApplicationMain. This instantiates one and then during the applicationDidFinishLaunchingWithOptions: method you are expected to create a window, set a view controller as its rootViewController and make it key and visible.

  2. You pass nil as the name of the class in UIApplicationMain and set a main window XIB. This means that the XIB is instantiated and inside it you are expected to have an instance of your app delegate and a window with the root view controller all set up. The "File's Owner" will be a UIApplication instance and you can set the delegate outlet in it to your application delegate object that you have in your XIB. Then in applicationDidFinishLaunchingWithOptions: you just need to do the make key and visible step.

mattjgalloway
  • 34,792
  • 12
  • 100
  • 110
  • my "image View" (see the imgur link, the custom class for it is UIImageView, but it does not give an option for my ViewController class. I have it linked to File Owner which is does have its class set to ViewController. I have done the connection between File Owner and Image View, giving me an outlet like: imageView ---------- Image View – Cuchullainn Feb 26 '12 at 19:18
  • Still have no luck at this, anyone else have any other suggestions? Should I put up the code for the didFinishLaunchingWithOptions method? I really need help with thid=s. – Cuchullainn Feb 26 '12 at 21:25
  • Can you put the whole project up somewhere? – mattjgalloway Feb 26 '12 at 21:41
  • http://www.mediafire.com/?ajodezrprtf8j5w this is the project, called FriendSpotted, appreciate you looking at this. Totally stumped and I am getting driven mad by it. – Cuchullainn Feb 26 '12 at 22:17
  • @Cuchullainn - I've added an update to solve your problem. Let me know any questions. (Apologies for the delay - it was nighttime in GMT :-)) – mattjgalloway Feb 27 '12 at 09:26
  • Thanks a lot matt and appreciate all the help you have given so far, it really helped me out, the explanation is useful and I know longer have that error. But now it's saying I don't have a root view controller at the end of application launch, when in fact I have it at the end of my applicationDidFinishLaunchingWithOptions method. Which is in the project code I sent you. No idea why that error message is coming up. – Cuchullainn Feb 27 '12 at 13:28
  • It didn't for me when I did the steps I explained. What exact steps did you take to go from the project you posted to where you have it now? (Or just post an updated one somewhere :-)) – mattjgalloway Feb 27 '12 at 14:15
  • Sorry I had a lot of work to do yesterday outside of this project so I couldn't get back to you. It's ok I figured why I was getting the error, I forgot to setup the view outlet with File Owner, the screen is showing up fine now. Thanks again matt for the help, much appreciated, hopefully nothing else will go wrong that I don't know how to fix :) – Cuchullainn Feb 28 '12 at 12:26