2016-07-20 21 views
0

Ich habe ein Array von Objekten, die ich durchlaufen und in einer Kerndateneinheit suchen/einfügen muss. Ich kann mir einfach nicht vorstellen, wie man in albumParentFolders eintaucht und ob es sie gibt, wenn sie nicht zu den Entity-Alben hinzugefügt werden.So importieren Sie hierarchische Ordnerstildaten

Ich weiß, es ist eine Art rekursive Methode, die in die AlbumParentFolders bohrt, aber aufgrund der Struktur meiner AlbumObjects kann keine funktionierende Lösung gefunden werden.

Also, meine Array von Objekten zu importieren sind wie diese

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) 

ich zum ersten Suche Kerndaten benötigen und wenn nicht Einsatz der albumFolderName in eine Core Data Entity Alben genannt gefunden. Fügen Sie dann mithilfe der automatisch generierten Klasse für die Albumeinheit ein neues Detailobjekt für diesen Ordner ein. z.B. [newFolder addDetailsObject: newDetails] albumFolderName ist auch in den Core-Daten nicht eindeutig, da der albumFolderName in verschiedenen übergeordneten Ordnern mehrfach aufgeführt sein könnte.

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

Die Albumordner werden schließlich mit NSOutlineView und IB-Bindungen in einer Baumansicht angezeigt. Dieser Teil funktioniert bereits.

Wenn jemand könnte beraten, wie die AlbumObjects zu iterieren, insbesondere bohren in AlbumParentFolders, so dass die gesamte Ordnerstruktur in der Entität gespeichert werden kann, wäre ich sehr dankbar.

SDK benötigt OSX 10.7+

+0

Ist 'albumParentFolders' einen vollständigen Pfad? AlbumFolderNames sind nicht eindeutig und Sie fügen nur ein, wenn Sie nicht gefunden werden? – Willeke

+0

albumParentFolders ist entweder Null oder der vollständige Pfad, der ungefähr so ​​aussieht wie [0] = @ "Allgemein" [1] = @ "Juli 2016" [2] = @ "Keep" albumFolderName wäre in diesem Fall @ "Keep". albumFolderName könnte auch nil sein, was darauf hindeutet, dass es keinen Ordner und daher kein Root-Detailelement gibt. Was ich hart finde, ist, dass das nächste Array-Objekt könnte in einem ähnlichen Ordner wie [0] = @ "New Import" [1] = @ "Juli 2016" [2] = @ "Keep" so ich müssen Eltern von Eltern des Elternteils finden, um zu bestätigen, ob sie existieren oder nicht. Ich denke, das ist der rekursive Teil, den ich nicht ergründen kann. – GeoffCoope

Antwort

2

Start bei der Wurzel, folgen Sie den Baum und erstellen fehlende Zweige zu unterstützen.

Pseudo-Code:

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

Danke. Ihr Beispiel war genau das, was ich brauchte, um mich auf den richtigen Weg zu bringen: D Ich habe es jetzt funktioniert. – GeoffCoope

+0

Ich dachte, es lief zu gut. Ich habe immer noch ein Problem, zum Beispiel importiere ich Alben und Details, die Ordner haben (ABC/Juli/Keep) und importiere dann einen anderen Satz Alben mit den Ordnern (DEF/Juli/Keep) es wird die neuen Albumdetails für/hinzufügen Juli und/Halten Sie sich in den ABC-Ordnern. Ich möchte nicht, dass das passiert, ich erstelle bei jedem Import einen neuen Ordner und möchte, dass alle neuen Alben dorthin gehen. Irgendwelche Ideen? – GeoffCoope

+1

'Ordner in Untergruppen von parentAlbum finden 'ist keine fetchRequest. Es sucht nach 'Ordner' in' parentAlbum.Groups'. Ich habe meine Antwort aktualisiert. Sind ABC- und DEF-Untergruppen von root oder erstellen Sie bei jedem Import ein neues root? – Willeke