Как инициализировать подкласс PFObject при извлечении?

В документах Parse конкретно указано, что вы не должны переопределять init для подклассов PFObject. Это нормально для объектов, созданных в коде, потому что вы можете переопределить метод объекта, например...

@implementaion CustomObject : PFObject <Subclassing>

+ (instancetype) object {
    CustomObject *me = [super object];

    // init some instance variables or whatever

    return me;
}

@end

Это работает, когда для этого случая: CustomObject *myThing = [CustomObject object];

Но объект, похоже, не вызывается при извлечении объекта из запроса....

PFQuery *query = [CustomObject query];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (!error) {
        for(int i = 0; i < objects.count; i++){
            CustomObject *myThing = objects[i];
            // object method was never called...
        }
    }
}];

Итак... как я могу инициализировать пользовательский объект PFObject при его извлечении?


person pizzafilms    schedule 13.11.2014    source источник
comment
Во-первых, какие переменные экземпляра вы создаете, которые имеют смысл только для клиента iOS? Во-вторых, что, если после извлечения объекта из массива просто вызвать [myThing object]? Немного избыточно, но это сработает, верно?   -  person mbm29414    schedule 13.11.2014
comment
Это не [объект myThing], это [объект CustomClass]... который создает и выделяет новый пользовательский подкласс PFObject.   -  person pizzafilms    schedule 14.11.2014
comment
Ах, мой плохой. Я пропустил, что это метод класса. Хорошо, можно ли переместить код инициализации в собственный метод, вызвать его из [MyObject object], но также иметь возможность вызывать его для объекта, возвращаемого из PFQuery?   -  person mbm29414    schedule 14.11.2014
comment
Я думаю, это возможно, просто я хотел бы, чтобы это было чем-то вроде метода инициализации, где он вызывался бы без того, чтобы мне приходилось думать об этом.   -  person pizzafilms    schedule 14.11.2014
comment
Взгляните на мой ответ здесь: " title="как я могу автоматически инициализировать словари изменяемых массивов для моего pfobject"> stackoverflow.com/questions/26381666/   -  person LostInTheTrees    schedule 14.11.2014
comment
@LostInTheTrees Мне неясно (из вашего ответа), как это отвечает на ЭТОТ вопрос. ОП хочет автоматический способ инициализации генерируемых запросом экземпляров своего класса. Он уже понял, как инициализировать экземпляры, которые он делает на своей стороне. Я что-то упускаю?   -  person mbm29414    schedule 14.11.2014
comment
Я думал, что он найдет этот код более полезным, чем его рудиментарная инициализация. Инициализация уже существующего объекта не имеет особого смысла. Моя функция tLObjectInit может быть вызвана для любого объекта. Я мог бы содержать любое количество записей формы, если (‹поле не существует›) инициализировать поле.   -  person LostInTheTrees    schedule 15.11.2014
comment
@LostInTheTrees, хотя я ценю вашу идею UUID, которая полезна, она не отвечает на то, что я ищу ... способ инициализировать PFObject, создан ли он с нуля или из запроса. К сожалению, Parse не позволяет нам переопределить init или, по крайней мере, дать нам параметры, чтобы иметь возможность переопределить его. Это был бы ответ.   -  person pizzafilms    schedule 15.11.2014
comment
@pizzafilms Я не понимаю, как объект может быть создан с помощью запроса. Он должен быть уже создан, чтобы его можно было найти с помощью запроса. В этом случае он должен быть уже инициализирован. Вы пытаетесь восстановить предыдущие неправильные инициализации?   -  person LostInTheTrees    schedule 17.11.2014


Ответы (1)


Вероятно, вы не зарегистрировали свой подкласс.

Просто позвоните [CustomObject register] перед

[Parse setApplicationId:@"your id"
                  clientKey:@"your key"];

или добавить в подкласс

+ (void) load{
    [self register];
}
person Zhanserik Kenes    schedule 20.05.2015