Доступ к IBOutlet из другого класса (ObjC)

Я погуглил и нашел несколько ответов, но ни один из них не работал. У меня есть один NSObject с классом «A» и второй класс «B» без NSObject. В классе "A" определены мои IBOutlets, и я не могу понять, как получить доступ к этим выходам из класса "B"...

Я нашел ответы на такие вопросы, как http://forums.macrumors.com/archive/index.php/t-662717.html Но они сбивают с толку.

Любая помощь будет принята с благодарностью!

Упрощенная версия кода:

aClass.h:

#import <Cocoa/Cocoa.h>

@interface aClass : NSObject {
    IBOutlet NSTextField *textField;
}
@end


aClass.m:

#import "aClass.h"

@implementation aClass
// Code doesn't matter
@end


bClass.h:

#import <Cocoa/Cocoa.h>

@interface bClass : NSObject {
}
@end


bClass.m:

#import "aClass.h"
#import "bClass.h"

@implementation bClass
    [textField setStringValue: @"foo"];
@end

person Jef    schedule 20.12.2009    source источник
comment
почтовый индекс, особенно класс B   -  person ennuikiller    schedule 20.12.2009
comment
Упрощенная версия: aClass.h: #import ‹Cocoa/Cocoa.h› @interface a : NSObject { IBOutlet NSTextField *textField; } @end aClass.m: #import ah @implementation a // Код не имеет значения @end bClass.h: #import ‹Cocoa/Cocoa.h› @interface b : NSObject { } @end bClass.m: #import ах #import bh @implementation b [textField setStringValue: @foo]; @конец   -  person Jef    schedule 20.12.2009
comment
О, это немного запутано, упрощенная версия: ‹code›aClass.h: #import ‹Cocoa/Cocoa.h› @interface a : NSObject { IBOutlet NSTextField *textField; } @end aClass.m: #import ah @implementation a // Код не имеет значения @end bClass.h: #import ‹Cocoa/Cocoa.h› @interface b : NSObject { } @end bClass.m: #import ах #import bh @implementation b [textField setStringValue: @foo]; @конец‹/код›   -  person Jef    schedule 20.12.2009
comment
Извините, я понятия не имею, как сделать это правильно...   -  person Jef    schedule 20.12.2009
comment
Попробуйте добавить этот код в конец исходного сообщения внутри тегов ‹pre›.   -  person Vincent Gable    schedule 20.12.2009
comment
Хорошо, это сработало, спасибо.   -  person Jef    schedule 21.12.2009


Ответы (2)


Когда вы пишете:

У меня есть один NSObject с классом «A» и второй класс «B» без NSObject.

Это говорит мне о том, что вы не разбираетесь в основных понятиях. Прочитайте введение Apple в Objective-C и учебные проекты.

person NSResponder    schedule 20.12.2009
comment
Я читаю amazon.com/Programming-Objective-C-2 -0-Stephen-Kochan/dp/ Я думаю, что в конечном итоге все сведется к тому же. - person Jef; 20.12.2009
comment
Нам очень помог ваш ответ. - person Throdne; 14.07.2012

Решение использует NSNotificationCenter. Вот поток, рассказывающий вам, как это сделать: Отправлять и получать сообщения через NSNotificationCenter в Objective-C?

Затем в методе, реагирующем на уведомление, вы вызываете метод, обращающийся к Outlet

- (void) receiveTestNotification:(NSNotification *) notification
{

    if ([[notification name] isEqualToString:@"TestNotification"])
        //NSLog (@"Successfully received the test notification!");
        [self performSelectorOnMainThread:@selector(doIt:) withObject:nil waitUntilDone:false];
}
- (void) doIt
{
    //testLabel.text = @"muhaha";
}

Это сработало для меня, я надеюсь, что это сработает и для вас.

person Erik    schedule 19.08.2011
comment
где мне написать этот метод уведомления, в классе A или в классе B? - person triandicAnt; 14.08.2013