2016-07-20 3 views
0

У меня есть массив объектов, которые мне нужны для повторения и поиска/вставки в основной объект данных. Я просто не могу понять, как погрузиться в albumParentFolders и посмотреть, существуют ли они, если не добавить их в альбомы сущностей.Как импортировать данные стиля иерархического каталога

Я знаю, что это какой-то рекурсивный метод, который сверлится в альбомеParentFolders, но из-за того, что мои структуры AlbumObjects не могут найти рабочего решения.

Итак, мой массив объектов для импорта, как этого

NSArray AlbumObjects 
--------------------------------------- 
NSString * albumFolderName 
NSString * albumDetailsTitle 
NSString * albumDetailsURL 
NSArray * albumParentFolders (Array of (NSStrings *) of albumFolderNames used for the level in the tree this album lives in. Can be nil for a root folder) 

Я сначала нужно найти основные данные и если не найден Вставьте albumFolderName в Core Data Entity под названием альбома. Затем, используя автоматически созданный класс для объекта альбома, вставьте новый объект данных для этой папки. например [newFolder addDetailsObject: newDetails] Кроме того, albumFolderName не уникален в основных данных, поскольку имя albumFolderName может быть перечислено несколько раз, но в разных родительских папках.

Entity: albums 
------------------------------------- 
Attribute: folderName 
------------------------------------- 
Relationship: albumDetails <------>> Entity : details (For adding multiple albumDetailsTitle and albumDetailsURL) 
Relationship: parent  <<------- 
Relationship: subGroups   | 
        ^   | 
        ------------ 

Папки альбомов в конечном итоге отображаются в древовидной структуре с использованием NSOutlineView и привязок IB. Эта часть уже работает.

Если кто-нибудь может посоветовать, как итерации AlbumObjects, в частности, бурение в albumParentFolders, чтобы вся структура папок могла храниться в сущности, я был бы очень благодарен.

SDK должна поддерживать OSX 10.7+

+0

ли 'albumParentFolders' полный путь? AlbumFolderNames не уникальны, и вы вставляете их только тогда, когда их не нашли? – Willeke

+0

albumParentFolders - либо nil, либо полный путь, который может выглядеть примерно как [0] = @ "General" [1] = @ "July 2016" [2] = @ "Keep" albumFolderName будет @ "Keep" в этом случае. albumFolderName также может быть nil, предполагая, что у него нет папки, поэтому элемент детализации root. То, что я нахожу, состоит в том, что следующий объект массива может находиться в аналогичной папке, такой как [0] = @ «Новый импорт» [1] = @ «Июль 2016» [2] = @ «Keep», поэтому я необходимо найти родительский элемент родителя родителя для проверки его наличия или отсутствия. Я думаю, это снова рекурсивная часть, которую я не могу понять. – GeoffCoope

ответ

2

Пуск в корне, следовать за дерево и создать недостающие ветви.

Псевдо код:

album = root 
if (albumParentFolders != nil) { 
    parentAlbum = root 
    for (folder in albumParentFolders) { 
     album = find folder in parentAlbum.subGroups 
     if (album not found) { 
      album = insert new album 
      album.folderName = folder 
      album.parent = parentAlbum 
     } 
     parentAlbum = album 
    } 
} 
add details to album 
+0

Спасибо. Ваш пример был именно тем, что мне нужно, чтобы заставить меня на правильном пути: D Теперь у меня это работает. – GeoffCoope

+0

Я думал, что все идет хорошо. У меня все еще есть проблема, например, я импортирую альбомы и детали, которые имеют папки (ABC/July/Keep), а затем импортирует другой набор альбомов с папками (DEF/July/Keep), он добавит новые данные альбома для/Июль и/Хранить в папках ABC. Я не хочу, чтобы это произошло, я создаю новую папку для каждого импорта и хочу, чтобы все новые альбомы вошли туда. Есть идеи? – GeoffCoope

+1

'find folder in subGroups of parentAlbum' не является fetchRequest. Он ищет 'folder' в' parentAlbum.subGroups'. Я обновил свой ответ. Подгруппы ABC и DEF из корня или вы создаете новый корень при каждом импорте? – Willeke

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