Xcode Issue can't get code working - xcode

When I tried to execute this XCODE an error occured. Can anyone help me understand it please? The Error is at line 5.
#import <UIKit/UIKit.h>
#interface BIDViewController : UIViewController
#property (weak, nonatomic) IBOutlet UITextField *numberField;
#property (weak, nonatomic) IBOutlet UITextField *nameField;
- (IBAction)textFieldDoneEditing:(id)sender;
[sender resignFirstResponder];
#end
Thanks.

[sender resignFirstResponder];
You can't do that in a .h file. Remove it. That belongs in .m.

in .h
#import <UIKit/UIKit.h>
#interface BIDViewController : UIViewController
#property (weak, nonatomic) IBOutlet UITextField *numberField;
#property (weak, nonatomic) IBOutlet UITextField *nameField;
- (IBAction)textFieldDoneEditing:(id)sender;
in .m
- (IBAction)textFieldDoneEditing:(id)sender
{
[sender resignFirstResponder];
}

Related

View Switching: Unrecognised selector sent to instance

I made some example that changes view by clicking button.
When clicking the "fist" button in view, I keep getting the error:
[__NSArrayM changeLogView:]: unrecognized selector sent to instance 0x100539e30
Here is the simplified code:
DSWAppDelegate.h
#import <Cocoa/Cocoa.h>
#class DSWHomeViewController;
#interface DSWAppDelegate : NSObject <NSApplicationDelegate>
#property (assign) IBOutlet NSWindow *window;
#property (weak) IBOutlet NSButton *logBtn;
#property (weak) IBOutlet NSTabView *tabView;
#end
DSWAppDelegate.m
#import "DSWAppDelegate.h"
#import "DSWLogViewController.h"
#implementation DSWAppDelegate
- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
// Insert code here to initialize your application
[self.tabView setTabViewType:NSNoTabsNoBorder];
NSTabViewItem *item = nil;
DSWLogViewController *logvc = [[DSWLogViewController alloc initWithNibName:#"DSWLogViewController" bundle:[NSBundle mainBundle]];
item = [[NSTabViewItem alloc] initWithIdentifier:#"log"];
[item setView:logvc.view];
[self.tabView insertTabViewItem:item atIndex:0];
}
#end
DSWLogViewController.h
#import <Cocoa/Cocoa.h>
#interface DSWLogViewController : NSViewController
#property (weak) IBOutlet NSButton *firstBtn;
#property (weak) IBOutlet NSButton *secondBtn;
#property (weak) IBOutlet NSBox *box;
- (IBAction)changeLogView:(id)sender;
- (IBAction)testSelector:(id)sender;
#end
DSWLogViewController.m
#import "DSWLogViewController.h"
#implementation DSWLogViewController
- (IBAction)changeLogView:(id)sender
{
NSLog(#"changeLogView : %#", sender);
}
- (IBAction)testSelector:(id)sender
{
NSLog(#"testSelector : %#", sender);
}
#end
And I checked class name of file owner.
Something is sending a changeLogView: message to a mutable array instead of your view controller. Chances are, whatever you've connected the IBAction to is pointing to the wrong object - an array of some sort, rather than your view controller.

Parse Issue, #end must appear in context

I am trying to build this app and every time I try to build it, it always gives me a parse error.
#import "XYZFlipsideViewController.h"
#end <===This is the error. It says: '#end' must appear in an Objective-C context
#interface XYZMainViewController : UIViewController <XYZFlipsideViewControllerDelegate,
UIPopoverControllerDelegate>
#property (strong, nonatomic) IBOutlet UIWebView *viewWeb;
#property (strong, nonatomic) NSManagedObjectContext *managedObjectContext;
#property (strong, nonatomic) UIPopoverController *flipsidePopoverController;
#end
I have tried to delete the first
#end
but it always gives me a lot more errors.

What is "Type name requires specifier or qualifier" in Xcode 4.6.2?

#import <UIKit/UIKit.h>
#interface ViewController : UIViewController
#property (weak, nonatomic);
#property (weak, nonatomic);
#end
I am getting the same error on both #property lines. It is telling me "Type name requires specifier or qualifier". This is under the ';' on both lines.
Please help!
You're not declaring your properties correctly, you need to tell it what kind of object you have and what the name is:
For example
#property (copy, nonatomic) NSString *title;
#property (assign, nonatomic) BOOL *hasReadDocumentation;

Arc Error ?? Existing ivar delegate for unsafe_unretained property

I am currently following the tutorials in a book that was written before the use of arc in Xcode. I have the exact same problem like what is stated here:
'Existing ivar 'delegate' for unsafe_unretained property 'delegate' must be __unsafe_unretained
The question has been answered, but is has not been stated exactly why this is the case.
The Code in the book states that I use this code to declare member variables:
the.h File
___________
#import <Cocoa/Cocoa.h>
#interface TestProgramDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSTextField *message;
}
#property (assign) IBOutlet NSWindow *window;
#property (assign) IBOutlet NSTextField *message;
#property (assign) IBOutlet NSTextField *inputText;
#end
the.m file
__________
#import "the.h" //File
#implementation theHFileAppDelegate
#synthesize window
#synthesize message
#synthesize inputText
When I synthesize the variables in my .m file, I get the following error message:
Existing ivar 'window' for property 'window' with assign attribute must be __unsafe_unretaied.
But when I remove the declaration of the member variables like its stated in the book, everything works fine and I don't get an error.
the.h File
___________
#import <Cocoa/Cocoa.h>
#interface TestProgramDelegate : NSObject <NSApplicationDelegate> {
NSWindow *window;
NSTextField *message;
}
#property (assign) IBOutlet NSWindow *window;
#property (assign) IBOutlet NSTextField *message;
#property (assign) IBOutlet NSTextField *inputText;
#end
the.m file
__________
#import "the.h" //File
#implementation theHFileAppDelegate
#synthesize window
#synthesize message
#synthesize inputText
My program works, but I want to understand why this causes trouble. Thanks a lot.

Xcode - viewDidLoad method not working

I am new to Objective-c and Xcode, yet I believe I know enough about it to realize that something is going wrong here. I have an application using a storyboard, and one of the views in the application is not running its viewDidLoad method. I am not sure if this is relevant, but I had recently accidentally deleted my original storyboard, and had to make another one. The original had worked great with no problems, yet when I use the new one, it does not work. The view in question is also the first view of a Tab Bar Controller, which might be part of the problem.
Here is the code from the class responsible for the view (.h):
#import <UIKit/UIKit.h>
#interface TabSynth : UIViewController
#property (nonatomic, retain) IBOutlet UIImageView *tomeWater;
#property (nonatomic, retain) IBOutlet UIImageView *tomeFire;
#property (nonatomic, retain) IBOutlet UIImageView *tomeAir;
#property (nonatomic, retain) IBOutlet UIImageView *tomeEarth;
#property (nonatomic, retain) IBOutlet UIImageView *tomeDark;
#property (nonatomic, retain) IBOutlet UIImageView *tomeLight;
#property (nonatomic, retain) IBOutlet UIButton *airSynthButton;
#property (nonatomic, retain) IBOutlet UIButton *darkSynthButton;
#property (nonatomic, retain) IBOutlet UIButton *earthSynthButton;
#property (nonatomic, retain) IBOutlet UIButton *fireSynthButton;
#property (nonatomic, retain) IBOutlet UIButton *lightSynthButton;
#property (nonatomic, retain) IBOutlet UIButton *waterSynthButton;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonLarv;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonAmoeb;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonLarv1;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonAmoeb1;
#property (nonatomic, retain) IBOutlet UIImageView *tomeWater1;
#property (nonatomic, retain) IBOutlet UIImageView *tomeFire1;
#property (nonatomic, retain) IBOutlet UIImageView *tomeAir1;
#property (nonatomic, retain) IBOutlet UIImageView *tomeEarth1;
#property (nonatomic, retain) IBOutlet UIImageView *tomeDark1;
#property (nonatomic, retain) IBOutlet UIImageView *tomeLight1;
And here is the code from the (.m):
#import "TabSynth.h"
#implementation TabSynth
#synthesize tomeWater;
#synthesize tomeFire;
#synthesize tomeAir;
#synthesize tomeEarth;
#synthesize tomeDark;
#synthesize tomeLight;
#synthesize tomeWater1;
#synthesize tomeFire1;
#synthesize tomeAir1;
#synthesize tomeEarth1;
#synthesize tomeDark1;
#synthesize tomeLight1;
#synthesize airSynthButton;
#synthesize darkSynthButton;
#synthesize earthSynthButton;
#synthesize fireSynthButton;
#synthesize lightSynthButton;
#synthesize waterSynthButton;
#synthesize synthButtonLarv;
#synthesize synthButtonAmoeb;
#synthesize synthButtonLarv1;
#synthesize synthButtonAmoeb1;
-(void)viewDidLoad {
extern int gTomeAir;
extern int gTomeDark;
extern int gTomeEarth;
extern int gTomeFire;
extern int gTomeLight;
extern int gTomeWater;
extern int gAmoebaeNum;
extern int gLarvaeNum;
synthButtonAmoeb.hidden=YES;
synthButtonAmoeb1.hidden=NO;
synthButtonLarv.hidden=YES;
synthButtonLarv1.hidden=NO;
if (gTomeAir>0) {
tomeAir.hidden=NO;
tomeAir1.hidden=YES;
airSynthButton.hidden=NO;
}
if (gTomeDark>0) {
tomeDark.hidden=NO;
tomeDark1.hidden=YES;
darkSynthButton.hidden=NO;
}
if (gTomeEarth>0) {
tomeEarth.hidden=NO;
tomeEarth1.hidden=YES;
earthSynthButton.hidden=NO;
}
if (gTomeFire>0) {
tomeFire.hidden=NO;
tomeFire1.hidden=YES;
fireSynthButton.hidden=NO;
}
if (gTomeLight>0) {
tomeLight.hidden=NO;
tomeLight1.hidden=YES;
lightSynthButton.hidden=NO;
}
if (gTomeWater>0) {
tomeWater.hidden=NO;
tomeWater1.hidden=YES;
waterSynthButton.hidden=NO;
}
if (gAmoebaeNum > 0) {
synthButtonAmoeb.hidden=NO;
synthButtonAmoeb1.hidden=YES;
}
else {
synthButtonAmoeb.hidden=YES;
synthButtonAmoeb1.hidden=NO;
}
if (gLarvaeNum >= 1) {
synthButtonLarv.hidden=NO;
synthButtonLarv1.hidden=YES;
}
else {
synthButtonLarv.hidden=YES;
synthButtonLarv1.hidden=NO;
}
}
In the if statements, the external integers being called (gTome) were set equal to a number in the previous view. Any help at all would be great, and I apologize for the simpleness of my coding.
If it's not calling viewDidLoad, then the first thing to check is that in your storyboard you have properly set TabSynth as the custom class of your view controller. Also, I don't see an NSLog in your viewDidLoad method. How do you know it's not being called?
By the way, did you know that you can put non-UI objects in a nib or storyboard? I think this might help you simplify your code. For example, you could have a class ElementViews defined like this:
ElementViews.h
#interface ElementViews : NSObject
#property (assign, nonatomic) IBOutlet UIImageView *tome;
#property (assign, nonatomic) IBOutlet UIButton *synthButton;
#property (assign, nonatomic) IBOutlet UIImageView *tome1;
#end
and then in your TabSynth class, instead of three outlets for every element, you just have one outlet:
TabSynth.h
#class ElementViews;
#interface TabSynth : UIViewController
#property (nonatomic, retain) IBOutlet ElementViews *waterViews;
#property (nonatomic, retain) IBOutlet ElementViews *fireViews;
#property (nonatomic, retain) IBOutlet ElementViews *airViews;
#property (nonatomic, retain) IBOutlet ElementViews *earthViews;
#property (nonatomic, retain) IBOutlet ElementViews *darkViews;
#property (nonatomic, retain) IBOutlet ElementViews *lightViews;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonLarv;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonAmoeb;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonLarv1;
#property (nonatomic, retain) IBOutlet UIButton *synthButtonAmoeb1;
...
In your storyboard, you drag a generic "Object" (looks like an orange cube) into your TabSynth scene. Change its custom class to ElementViews and its identity label to Water Views. Connect the waterViews outlet of the TabSynth to this new ElementViews object, and connect the outlets of the ElementViews object to the three water views (the tome and tome1 image views and the synthButton button). Repeat for the other five elements.
Then you can simplify your viewDidLoad method like this:
- (void)configureElementViews:(ElementViews *)elementViews state:(int)state {
if (state > 0) {
elementViews.tome.hidden = NO;
elementViews.tome1.hidden = YES;
elementViews.synthButton.hidden = NO;
}
}
- (void)viewDidLoad {
extern int gTomeAir;
extern int gTomeDark;
extern int gTomeEarth;
extern int gTomeFire;
extern int gTomeLight;
extern int gTomeWater;
extern int gAmoebaeNum;
extern int gLarvaeNum;
synthButtonAmoeb.hidden=YES;
synthButtonAmoeb1.hidden=NO;
synthButtonLarv.hidden=YES;
synthButtonLarv1.hidden=NO;
[self configureElementViews:self.waterViews state:gTomeWater];
[self configureElementViews:self.fireViews state:gTomeFire];
[self configureElementViews:self.airViews state:gTomeAir];
[self configureElementViews:self.earthViews state:gTomeEarth];
[self configureElementViews:self.darkViews state:gTomeDark];
[self configureElementViews:self.lightViews state:gTomeLight];
}
ok but you must write [super viewDidLoad] at the beginning of the method -viewDidLoad to call the viewDidLoad of the Controller itself (the father or its predecessor in the hierarchy of object) before writing your superb code which create a derived version of -viewDidLoad.
voila, good luck.

Resources