2013-02-27 1 views
0

У меня есть приложение для Mac OS, которое использует данные ядра для сохранения своих объектов на диске, поддерживаемых sqlite.Сохранять содержимое и порядок контроллера массива в какао

У меня есть tableView, где можно проверить все подклассы NSManagedObject. Это связано с arrayController, который привязан к объекту в управляемом объектеContext.

Используя объекты этого массива Controller, я загружаю еще один массивController, который поддерживает другой tableView, который используется для организации объектов, готовых для экспорта в файл tsv. Этот tableView позволяет перетаскивать и отбрасывать, чтобы переупорядочивать и удалять записи, но ни одно из них не влияет на managedObjectContext.

Каков наилучший способ сохранить содержимое этого второго массива Controller на диске, чтобы при открытии документа tableView имел те же объекты в том же порядке, что и раньше?

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

EDIT - добавлен тег MacRuby, поскольку я теперь ответил на свой вопрос, используя этот язык.

+0

Проверить ответ на diablosnuevos в HTTP : //stackoverflow.com/questions/1077568/how-to-implement-re-ordering-of-coredata-records. Это выглядит просто. Вы также можете попробовать другие ответы. Перед отправкой вопроса вы можете найти связанные вопросы. – Rakesh

+0

Спасибо, Ракеш. Тем не менее, я конкретно говорю в последнем параграфе моего вопроса, что я не хочу добавлять поле заказа к моим объектам. Почему они должны заботиться о том, в каком порядке они находятся? – ryecroft

+0

Но даже в вашем ответе вы делаете более или менее одно и то же. Вместо добавления к управляемому объекту вы создаете plist с objectId. – Rakesh

ответ

0

Я выяснил, как это сделать сейчас.

Я не упомянул в вопросе, что приложение является MacRuby, поскольку оно не имеет отношения к делу, но я не уверен, что полностью перевел свое решение на Objective-C, поэтому я оставьте это как MacRuby.

Каждый объект NSManagedObject имеет идентификатор объекта класса NSManagedObjectID, который однозначно идентифицирует его в приложении. Таким образом, их можно легко запросить и сохранить на диск как строки в файле plist, например.

theObjects = arrayController.arrangedObjects 
       .map { |e| e.objectID.URIRepresentation.absoluteString } 

# save theObjects to disk as a plist or json. 

Это может быть использовано, чтобы воссоздать содержимое контроллера массива в том же порядке, в следующий раз, когда приложение запускается или при открытии документа:

def loadArrayController(arrayOfIDStrings) 
    objects = arrayOfIDStrings.map { |e| 
    url = NSURL.URLWithString(e) 
    moID = managedObjectContext.persistentStoreCoordinator.managedObjectIDForURIRepresentation(url) 
    managedObjectContext.objectWithID(moID) 
    } 
    arrayController.addObjects(objects) 
    arrayController.setSelectedObjects([]) 
end 

 Смежные вопросы

  • Нет связанных вопросов^_^