Цель C - Как использовать метод initWithCoder? - PullRequest
47 голосов
/ 15 октября 2010

У меня есть следующий метод для моего класса, который намеревается загрузить nib-файл и создать экземпляр объекта:

- (id)initWithCoder:(NSCoder*)aDecoder 
{
    if(self = [super initWithCoder:aDecoder]) {
        // Do something
    }
    return self;
}

Как создать экземпляр объекта этого класса?Что это за NSCoder?Как я могу его создать?

    MyClass *class = [[MyClass alloc] initWithCoder:aCoder];

Ответы [ 2 ]

40 голосов
/ 15 октября 2010

Вам также необходимо определить следующий метод следующим образом:

- (void)encodeWithCoder:(NSCoder *)enCoder {
    [super encodeWithCoder:enCoder];

    [enCoder encodeObject:instanceVariable forKey:INSTANCEVARIABLE_KEY];

    // Similarly for the other instance variables.
    ....
}

И в методе initWithCoder инициализируйте следующим образом:

- (id)initWithCoder:(NSCoder *)aDecoder {

   if(self = [super initWithCoder:aDecoder]) {
       self.instanceVariable = [aDecoder decodeObjectForKey:INSTANCEVARIABLE_KEY];

       // similarly for other instance variables
       ....
   }

   return self;
}

Вы можете инициализировать объект стандартным способом, т.е.1007 *

CustomObject *customObject = [[CustomObject alloc] init];
17 голосов
/ 15 октября 2010

Класс NSCoder используется для архивирования / разархивирования (маршалирования / демаршализации, сериализации / десериализации) объектов.

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

Я бы предложил вам прочитать http://developer.apple.com/library/mac/#documentation/cocoa/conceptual/Archiving/Archiving.html

...