#objective-c #cocoa-touch #cocoa
#objective-c #cocoa-touch #cocoa
Вопрос:
В настоящее время я пытаюсь легко сохранить состояние UIViewController. Однако очевидно, что существуют контроллеры одного и того же класса, которым необходимо сохранять свои данные в одном каталоге.
Итак, я ищу способ получить уникальные идентификаторы для экземпляра для безопасной записи данных на диск.
Заранее спасибо.
Комментарии:
1. Ваш вопрос даже не имеет смысла. Что означает, что два экземпляра должны быть «одинаковыми после повторного запуска приложения»?
2. Я согласен с @KevinBallard, вы могли бы сформулировать вопрос лучше. Тем не менее, я опубликовал ответ, основанный на моей интерпретации того, как он читается в данный момент.
3. @KevinBallard обновил мой вопрос. Надеюсь, теперь лучше.
Ответ №1:
Ответ на это заключается в том, что простого способа сделать это нет. Потому что это не то, что вы должны делать. Экземпляры объектов не являются моделью данных. Связи между объектами не сохраняются между запусками. Однако идентификаторы для данных могут быть созданы, и объекты могут отслеживать эти идентификаторы и соответствующие связи между данными.
например, вы можете создавать связи между объектами в своей модели данных, назначая UUID при создании экземпляра, а затем сохраняя его на диске при выходе… загружается с диска при запуске.
Я бы изучил NSCoding и Core Data … они оба предназначены для сохранения ваших данных при выходе из приложения.
Возможно, обновите / задайте новый вопрос, уточняя, чего вы пытаетесь достичь с помощью этого.
Комментарии:
1. Проблема с core data заключается в том, что мне все еще нужен идентификатор, чтобы найти правильный nsmanagedobject.
2.
NSManagedObject
Свойство @Larcus94 не помогло быobjectID
? Если вы пытаетесь сохранить и восстановить отношения между объектами, CoreData прекрасно справится с этим.3. Хм, как бы мне это сделать тогда? Мне все еще нужно где-то сохранить идентификатор объекта, поэтому я снова нахожу NSManagedObject.
Ответ №2:
Я не уверен на 100%, что правильно прочитал ваш вопрос, но я прочитал его дважды.
Это то, что вам нужно?
MyClass.h
@interface MyClass : NSObject
{
int myID;
}
@end
MyClass.m
//this is where the magic is. Keeps a static identifier which starts at zero each time you start the app and increments each time you init this class.
static int identifier = 0;
@implementation MyClass
-(id) init
...
identifier ;
myID = identifier;
...
}
....
@end
Комментарии:
1. Это работает, за исключением того, что следующий запуск будет другим. Статический int не сохраняется между сеансами.
2. Это правда. Это был бы простой способ, но он не будет таким же после перезапуска приложения.
3. Кажется, я неправильно прочитал ваш вопрос. Это будет работа, предполагающая, что вы создаете экземпляры в том же порядке, но если вы не можете этого гарантировать, мой ответ не сработает.