2013-12-25 7 views
2

Я пытаюсь установить текст NSTextField из другого класса ..управления IBOutlet равна нулю

Это то, что я есть:

Preferences.h

@interface Preferences : NSObject 
{ 
IBOutlet NSTextField *selectionPointX; 
} 
@property (nonatomic, unsafe_unretained) IBOutlet NSTextField *dateTimeFormatPreview; 

- (void)getSelection:(NSPoint)point :(NSSize)size; 

@end 

Preferences.m (только то, что нужно)

#import "Preferences.h" 

@implementation Preferences 

NSUserDefaults *userDefaults = nil; 

int cPx; 
int cPy; 
int cSw; 
int cSh; 

- (void)getSelection:(NSPoint)point :(NSSize)size{ 
    cPx = (int) point.x; 
    cPy = (int) point.y; 
    cSw = (int) size.width; 
    cSh = (int) size.height; 
    [self saveSelection]; 
} 

- (void)saveSelection{ 
    NSPoint p; 
    p.x = cPx; 
    p.y = cPy; 

    NSSize s; 
    s.width = cSw; 
    s.height = cSh; 

    [userDefaults setObject:NSStringFromPoint(p) forKey:@"selectionPoint"]; 
     NSLog(@"Saved Window Position: X: %i Y: %i", cPx, cPy); 

    [userDefaults setObject:NSStringFromSize(s) forKey:@"selectionSize"]; 
     NSLog(@"Saved Window Size: W: %i H: %i", cSw, cSh); 
    [userDefaults synchronize]; 


    [selectionPointX setIntegerValue:cPx]; // selectionPointX is nil 
} 

@end 

Я называю getSelection из другого класса, передавая значения Это.

В интерфейсе Builder у меня есть NSObject с классом Preferences, и из него я подключил выход к контроллеру. Но когда отладка selectionPointX равна nil и поэтому не обновляется мой TextField.

Я новичок в объективе-c, поэтому, возможно, я делаю это неправильно. Я много искал, но не могу найти решение.

Любая помощь приветствуется, спасибо.


EDIT: Я думаю, что я нашел эту проблему. Поскольку я вызываю метод из другого класса, я создаю другой экземпляр этого класса, и поэтому все соединения не подключены.

Я сделал это:

Preferences *prefs = [[Preferences alloc] init]; 
[prefs getSelection:(NSPoint)wPos :(NSSize)wSize]; 

Как я могу назвать тот же метод, но с использованием текущего экземпляра Preferences, который загружается в XIB?

ответ

0

У меня есть LocalSettingsController, который похож на то, что вы хотите здесь. Чтобы использовать тот же экземпляр Preferences, все время реализует шаблон Singleton. Вот код:

@implementation LocalSettingsController 

+ (id)alloc 
{ 
    return self.sharedSettings; 
} 

+ (id)allocWithZone: (NSZone *)zone 
{ 
    return self.sharedSettings; 
} 

+ (instancetype)sharedSettings 
{ 
    static LocalSettingsController* singleton = nil; 
    static dispatch_once_t onceToken; 
    dispatch_once(&onceToken, ^{ 
     singleton = [[self localAlloc] localInit]; 
    }); 

    return singleton; 
} 

- (id)init 
{ 
    return self; 
} 

+ (id)localAlloc 
{ 
    return [super allocWithZone: NULL]; 
} 

- (id)localInit 
{ 
    return [super init]; 
} 

В коде вы можете использовать sharedSettings член, в IB вы бы разместить NSObject в вашем XIb и изменить его тип экземпляра к LocalSettingsController (или в вашем случае Preferences).

Смежные вопросы