#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; Понимаете?