Как я могу ссылаться на указатель из другого класса? - PullRequest
0 голосов
/ 18 июня 2010

Во-первых, я страстно презираю одиночек. Хотя я, вероятно, должен пытаться использовать один, я просто не хочу. Я хочу создать класс данных (который создается только один раз контроллером представления при загрузке), а затем, используя другой класс, сообщать дерьмо из этого экземпляра данных, пока он не наполняется таким большим количеством данных, он улыбается.

Итак, как мне это сделать? Я сделал указатель на экземпляр класса данных, когда я его создал. Я сейчас в отдельном контроллере представления, происходит действие, и я хочу обновить исходный объект данных. Я думаю, что мне нужно ссылаться на этот объект с помощью указателя, но я не знаю, как это сделать. Да, я установил свойства и методы получения и установки, которые, кажется, работают, но только в начальном классе контроллера представления.

Ответы [ 6 ]

1 голос
/ 18 июня 2010

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

0 голосов
/ 18 июня 2010

Не забывайте, что Objective-C является надмножеством C.

По сути, класс данных представляет собой обычный C struct.

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

mydata.h:

struct MyData {
    // Whatever data fields that you need, e.g.:
    NSInteger value;
};

extern struct MyData mydata;

mydata.c:

struct MyData mydata = {
    // Whatever initial value that you find relevant, e.g.:
    .value = 42;
};
0 голосов
/ 18 июня 2010

Почему бы не сделать это свойством делегата вашего приложения?Таким образом, вам не нужно использовать шаблон синглтона, но вы используете уже существующее использование Apple шаблона синглтона.

0 голосов
/ 18 июня 2010

Um. Привет. Разве Core Data не является достаточно хорошей основой для вас? Это позволяет вам иметь одно постоянное хранилище и несколько контекстов для управления обновлениями и объединения изменений в ответ на уведомления. Может быть, я не согласен с этим, но, увидев, как вы начинаете вопрос с твердого мнения о хорошо принятом шаблоне в своем первом вопросе, указывает на то, что вы не потратили много времени на изучение способов, с помощью которых целевая среда выполнения и базовые классы в iOS может сотрудничать для достижения цели. В любом программном обеспечении одному объекту и только одному объекту принадлежит определенный ресурс. Вы должны принять одиночные игры. Я предлагаю вам потратить некоторое время на чтение http://www.cocoadesignpatterns.com/. О, да, посмотрите значение КВО.

0 голосов
/ 18 июня 2010

Серьезно используйте синглтон. Если они вам не нравятся, потому что вы не знаете код:

@interface Order : NSObject {
NSMutableArray *order;
}

@property (nonatomic, retain) NSMutableArray *order;

+ (Order *)sharedInstance;

@end

#import "Order.h"


@implementation Order

@synthesize order;

+(Order *)sharedInstance {
static Order *myInstance = nil;

@synchronized(self) {
    if(!myInstance) {
        myInstance = [[Order alloc] init];
        }
    }
return myInstance;
}

-(void)dealloc {
    [order release];
    [super dealloc];

}
@end
0 голосов
/ 18 июня 2010

Создайте глобальную переменную для вашего объекта и сохраните ее там при создании.Вы можете подключить это в методе init (возможно, в плохом стиле), либо из вызывающей стороны, либо через конструктор интерфейса.Просто сделайте вашу переменную известной в файлах, которые ее используют.

Или - хорошо - используйте какой-то одноэлементный шаблон и получите экземпляр непосредственно из этого класса.Выглядит намного чище.

...