Я пытаюсь использовать некоторые возможности программирования на iPhone, и я сталкиваюсь с тем, что может быть довольно очевидным для ветеранов, но я не совсем уверен, почему это происходит. У меня есть два класса UIViewController, и я хочу получить доступ к методу из другого класса. У меня есть два класса NSObject, связанных с обоими из них в IB (с файлом Class как UpdateClass для каждого), и я пытаюсь создать класс и вызвать метод. Кажется довольно простым, но проблема в том, что он вызывает метод (согласно NSLog), но он не обновляет метки. Вот мой код:iPhone - Пользовательский класс не будет использовать метод
//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
}
Итак, есть NSObject, подключенный к IB для обоих видов. Существует метка на каждом представлении, подключенном к NSObject, и Владелец файла (возможно, нет необходимости подключать их к обоим). Когда кнопка нажата (которая также правильно подключена в IB), метка должна перейти к некоторой строке. NSLog сообщает, что методы вызываются, но метки не меняются. Что здесь не так?
(обратите внимание: могут быть некоторые небольшие ошибки, поскольку я должен был напечатать некоторые из них, потому что у меня нет всего кода со мной в данный момент).
им интересно, почему вы используете класс только для хранения этикеток и обновить их? Также интересно, добавляете ли вы метки в этих классах в представление UIViewControllers – Daniel
Ну, потому что я решил, что какой-то централизованный класс для обработки обновлений имеет смысл ... Но, возможно, я не понимаю, как программирование Objective-C должно Работа. – 2009-07-24 17:25:13
Нет необходимости в этом, вы можете просто обработать обновление ярлыков в вашем UIViewCOntroller напрямую, вот что такое контроллеры для управления вашими взглядами. – Daniel