доступ к свойствам формирует экземпляр uiviewcontroler в objective c.

#objective-c #properties #ios5 #xcode4.2

#objective-c #свойства #ios5 #xcode4.2

Вопрос:

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

у меня есть следующий первый заголовок :

 #import <Foundation/Foundation.h>
#import "second.h"

@interface ViewController : UIViewController{
    NSString* theText;
}
@property (nonatomic, assign) IBOutlet UITextField *textField;
@property (nonatomic, retain) NSString *theText;



@end
 

здесь я использую файл .m

 #import "ViewController.h"

@implementation ViewController
@synthesize theText,textField;

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
    [self setTheText:textField.text];

}

@end
 

теперь я хотел бы использовать свойство theText в другом файле, чтобы использовать его и изменять. итак, я думал, что это сработает, но это не так:

второй файл .m:

 #import "second.h"
#import "ViewController.h"

@implementation second
@synthesize secLabel;

-(void)nameLabel{

    secLabel.text = [ViewController theText];
}

@end
 

компилятор сообщает, что для селектора нет известного метода класса. Я много пробовал, но ничего не получалось, кто-нибудь знает, как заставить это работать?

Tnx

Ответ №1:

theText — это свойство уровня экземпляра, но вы пытаетесь получить к нему доступ в классе ViewController. Вместо этого вам нужно получить к нему доступ в каком-либо экземпляре ViewController. Другими словами, вам нужно:

 ViewController *viewController = ... some code to get a ViewController pointer ...
secLabel.text = [viewController theText];
 

Ваш «второй» контроллер представления каким-то образом должен получить экземпляр ViewController. Как вы на самом деле получаете это, зависит от вашего приложения, и я не могу сказать, не зная больше о вашем коде.

Ответ №2:

http://www.galloway.me.uk/tutorials/singleton-classes/

Это покажет вам, как правильно создать одноэлементный класс.

Возможно, это не самый чистый способ сделать это, но он находится на правильном пути для хранения данных.

Комментарии:

1. Спасибо! я понимаю учебное пособие, однако я не понимаю, где / как вызывать: MyManager * sharedManager = [MyManager sharedManager]; вы можете это объяснить?

2. Это то, что вам нужно сделать, прежде чем выполнять какие-либо команды для доступа к одноэлементному классу.

3. итак, например, если вы меняете число после нажатия кнопки, вы бы написали его следующим образом MyManager * sharedManager = [MyManager sharedManager]; sharedManager.number = 1; Понимаете?