2012-06-23 5 views
0

У меня есть пользовательский класс, который я хочу «загрузить» внутри firstViewController, а затем получить доступ к нему из других классов с помощью segues. Моя проблема в том, что я не могу даже получить доступ и изменить переменную экземпляра внутри firstViewController. Как-то я «загружаю» это неправильно. Вот код, я использовал до сих пор:Правильно загружать пользовательский класс

внутри viewController.h

@property (strong, nonatomic) myClass *newClass; 

внутри viewController.m

@synthesize newClass; 

Затем я пытаюсь получить доступ к этому:

self.newClass.string = @"myString"; 
if(newClass.string == @"myString"){ 
    NSLog(@"didn't work"); 
} 

Ну, я получаю «не работает». Почему это? Когда я пишу

myClass *newClass = [myClass new]; 

Это действительно работает. Но класс и его свойства перезаписываются каждый раз, когда ViewController загружается снова.

Что вы посоветуете? Большое спасибо.

+0

Вы инициализируете свой объект myClass? –

+0

Я не уверен, но, думаю, нет, я только сделал то, что написал. – Linus

ответ

2

Как Каан сказал, что вы забыли инициализировать класс, Вы только декларировали и создал указатель на него, но не сам объект, на вашем ViewDidLoad добавить

self.newClass = [[myClass alloc] init]; 

Это делает работу. Но класс и его свойства перезаписываются каждые времени, когда ViewController загружается снова.

Это потому, что каждый раз, когда этот конкретный Viewcontroller загружает вас, вы повторно инициализируете класс.

Если вы хотите, чтобы постоянный класс через всю вашу программу искал шаблон singleton.

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

PD: newClass.string == @ "myString" неверна.

Используйте метод isEqualToString при сравнении строк.

+0

Спасибо за ваш ответ! Но я понял, что это может мне не помочь, даже если это отличное решение. Проблема в том, что я хочу иметь 4 экземпляра этого одного класса. И все они должны быть доступны из других viewControllers. Это возможно? – Linus

+1

да, вам нужно 4 экземпляра, каждый из них будет другим, поэтому просто создайте простой класс, который содержит экземпляр всех этих 4 и просто передайте этот класс, будьте осторожны, чтобы только инициализировать этот класс один раз и передать класс во все места, где вы нужно их. – Pochi

+1

Или вы можете просто передать каждый отдельно, единственная проблема в том, что вы повторно инициализируете класс, когда загружается ваш диспетчер просмотра. Просто создайте все те классы, которые вы знаете, которые будут сохранены в живых. Даже делегат приложения работает для этого случая (все ваши vc имеют к нему доступ), это действительно вопрос дизайна. – Pochi