私はいくつかの iPhone プログラミングを試していて、退役軍人にはかなり明白かもしれない何かに出くわしましたが、なぜそれが起こっているのか正確にはわかりません. 2 つの UIViewController クラスがあり、他のクラスからメソッドにアクセスしたいと考えています。IB でそれらの両方に関連付けられた 2 つの NSObject クラスがあり (クラス ファイルはそれぞれ UpdateClass として)、クラスを作成してメソッドを呼び出そうとしています。かなり簡単に思えますが、問題は、(NSLog によると) メソッドを呼び出しているが、ラベルを更新していないことです。これが私のコードです:
//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
}
したがって、両方のビューの IB に接続された NSObject があります。NSObject とファイルの所有者に接続された各ビューにはラベルがあります (両方に接続する必要はないかもしれません)。ボタンが押されると (これも IB で適切に接続されます)、ラベルは何らかの文字列に変更されるはずです。NSLog は、メソッドが呼び出されたことを報告しますが、ラベルは変更されません。ここで何が問題なのですか?
(注:現時点ではすべてのコードを持っていないため、これを入力する必要があったため、小さな間違いがある可能性があります)。