2016-07-20 17 views
0

我有一個需要迭代並找到/插入到核心數據實體的對象數組。我無法理解如何深入albumParentFolders並查看它們是否存在,如果不將它們添加到實體相冊中。如何導入分層文件夾樣式數據

我知道這是某種遞歸方法,可以深入到albumParentFolders中,但是由於我的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到核心數據實體,稱爲專輯。然後將自動生成的類用於相冊實體,爲該文件夾插入新的詳細信息對象。例如[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可能是零或完整路徑,可能看起來像[0] = @「General」[1] = @「2016年7月」[2] = @「保持」albumFolderName將是@「Keep」。 albumFolderName也可以爲零,表明它沒有文件夾,因此是一個根細節項目。 什麼我發現難,未來數組對象可能是像一個類似文件夾[0] = @「新建導入」 [1] = @「2016年七月」 [2] = @「保持」,所以我需要尋找父母父母的父母來驗證它是否存在。我想這是我再次無法理解的遞歸部分。 – 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)導入一組不同的相冊,它將添加新的相冊詳細信息/ 7月和/保持在ABC文件夾中。我不希望發生這種情況,我會在每次導入時創建一個新文件夾,並希望所有新專輯都進入該文件夾。有任何想法嗎? – GeoffCoope

+1

'在parentAlbum的子組中找到文件夾'不是fetchRequest。它在'parentAlbum.subGroups'中搜索'文件夾'。我已經更新了我的答案。是ABC的根和DEF子組或者你是否在每次導入時創建一個新的根? – Willeke