Ich versuche meine Hand bei einigen iPhone-Programmierung und ich habe über etwas, das für Veteranen ziemlich offensichtlich sein kann, aber ich weiß nicht genau, warum es passiert ist. Ich habe zwei UIViewController-Klassen und möchte auf eine Methode der anderen Klasse zugreifen. Ich habe zwei NSObject-Klassen, die beiden in IB zugeordnet sind (mit der Class-Datei als UpdateClass für jeden), und ich versuche, eine Klasse zu erstellen und eine Methode aufzurufen. Scheint ziemlich einfach, aber das Problem ist, dass es die Methode aufruft (laut NSLog), aber es aktualisiert die Etiketten nicht. Hier ist mein Code:iPhone - Benutzerdefinierte Klasse wird nicht zugänglich Methode
//UpdateClass.h
#import <Foundation/Foundation.h>
@interface UpdateClass : NSObject {
IBOutlet UILabel *lbl1;
IBOutlet UILabel *lbl2;
}
@property (nonatomic, retain) IBOutlet UILabel *lbl1;
@property (nonatomic, retain) IBOutlet UILabel *lbl2;
- (void)updateLabels;
@end
//UpdateClass.m
#import "UpdateClass.h"
@implementation UpdateClass
@synthesize lbl1;
@synthesize lbl2;
- (void)updateLabels {
NSString *someWord = @"Whatever"; // This could be anything
NSLog(@"NSObject Update");
[lbl1 setText:someWord];
[lbl2 setText:someWord];
}
@end
//ViewController1.h
#import <UIKit/UIKit.h>
@class UpdateClass;
@interface ViewController1 : UIViewController {
IBOutlet UIButton *button1;
NSObject *UpdateClassObject;
UpdateClass *updateClass;
}
@property (nonatomic, retain) IBOutlet UIButton *button1;
@property (nonatomic, retain) NSObject *UpdateClassObject;
@property (nonatomic, retain) UpdateClass *updateClass;
- (void)updateLabels:(id)sender;
@end
//ViewController1.m
#import "ViewController1.h"
#import "UpdateClass.h"
@implementation ViewController1
@synthesize button1;
@synthesize UpdateClassObject;
@synthesize updateClass;
- (void)viewDidLoad {
[super viewDidLoad];
updateClass = [[UpdateClass alloc] init];
}
- (void)updateLabels:(id)sender; { //This is connected to TouchDown on button1
NSLog(@"Calls UpdateLabels");
[updateClass updateLabels]; //Calls the class method
}
//ViewController2.h
#import <UIKit/UIKit.h>
@class UpdateClass;
@interface ViewController2 : UIViewController {
IBOutlet UIButton *button2;
NSObject *UpdateClassObject;
UpdateClass *updateClass;
}
@property (nonatomic, retain) IBOutlet UIButton *button2;
- (void)updateLabels:(id)sender;
@end
//ViewController2.m
#import "ViewController2.h"
#import "UpdateClass.h"
@implementation ViewController2
@synthesize button2;
@synthesize UpdateClassObject;
@synthesize updateClass;
- (void)viewDidLoad {
[super viewDidLoad];
updateClass = [[UpdateClass alloc] init];
}
- (void)updateLabels:(id)sender; { //This is connected to TouchDown on button2
NSLog(@"Calls UpdateLabels");
[updateClass updateLabels]; //Calls the class method
}
So gibt es ein NSObject in IB für beide Ansichten angeschlossen. Es gibt eine Bezeichnung für jede Ansicht, die an das NSObject und den Besitzer der Datei angeschlossen ist (möglicherweise ist es nicht notwendig, sie mit beiden zu verbinden). Wenn die Taste gedrückt wird (die auch in IB richtig angeschlossen ist), soll die Beschriftung zu einer Saite wechseln. NSLog meldet, dass die Methoden aufgerufen werden, die Beschriftungen jedoch nicht geändert werden. Was ist hier falsch?
(Hinweis: Es könnte einige kleine Fehler geben, da ich einige davon eingeben musste, weil ich im Moment nicht den ganzen Code bei mir habe).
im wundern, warum Sie nur eine Klasse verwenden Etiketten zu halten und sie aktualisieren? Ich frage mich auch, ob Sie die Beschriftungen in diesen Klassen zu Ihrer UIViewControllers-Ansicht hinzufügen. – Daniel
Nun, weil ich eine Art zentralisierte Klasse für den Umgang mit Updates gefunden habe, würde Sinn machen ... Aber vielleicht verstehe ich nicht, wie Objective-C programmieren soll Arbeit. –
Das ist wirklich nicht nötig, Sie können nur die Aktualisierung der Etiketten in Ihrem UIView-Controller direkt handhaben, das sind die Controller, mit denen Sie Ihre Ansichten verwalten können. – Daniel