2012-12-14 124 views
0

獨特的UIImage我想提出一個簡單的應用程序,用戶可以創建其保存CoreData severals對象。核心數據和每個對象

我的問題是,我希望每個對象都鏈接到它的圖像。該圖像是由iphone相機或用戶個人相機膠捲帶來的,因此圖像的重量會非常大(我認爲每個大於1MB)。 我讀到,當圖像的重量很高時,處理這個問題的好方法是將圖像保存在documentsDirectory文件夾中,並將路徑保存到coreData。我很輕鬆地實現了這一點。

但我怎麼找到圖片的路徑名被鏈接到一個唯一的對象? CoreData並沒有真正處理唯一的ID,並且兩個對象可以有相同的名稱......我圍繞objectID進行了搜索,但它並不是很好,我不確定這是處理這個問題的好方法。

你有什麼想法嗎?有沒有其他簡單的方法我完全失蹤?先謝謝你。

+0

您可以通過獨特的羣體是什麼意思? – fengd

+0

唯一對象。抱歉錯字。 –

回答

5

使用coredata的ObjectID保存到對象的路徑標識符

id uri = [self sanitizeFilename:coreDataObject.objectID.URIRepresentation]; 
[NSString stringWithFormat:@"%@.png", uri]; 

幫手sanitizeFilename:

- (NSString *)sanitizeFileNameString:(NSString *)fileName { 
    NSCharacterSet* illegalFileNameCharacters = [NSCharacterSet characterSetWithCharactersInString:@"/\\?%*|\"<>"]; 
    return [[fileName componentsSeparatedByCharactersInSet:illegalFileNameCharacters] componentsJoinedByString:@""]; 
} 
+0

可以像這樣使用和修改objectID嗎?我不敢做那樣的事情。 –

+0

無論如何,這是有效的。謝謝Daij-Djan。 –

+0

我一直這樣做,當然這個ID在多個設備上並不穩定,但爲了這樣的目的,它可以工作 –

1

就在您的CoreData模型實體描述中創建一個OBJECT_ID號屬性和每個新對象由一個創建增量此屬性,並將其分配給對象的時間,然後用像

[NSString stringWithFormat:@"object_%d_img.png", idNumber];

的命名約定

並保存到NSDoctumentsDirectory

然後在對象的- (void)prepareForDeletion方法刪除的圖像。

至於如何遞增的id值,創建將取得與值最大的ID對象的方法 - 只需通過ID遞減得到與排序描述符的所有對象,並創建一個新的實體,當使用+ 1。

+0

Manual uniqueID。很好的答案,但我正在尋找更「官方」的東西。不管怎樣,謝謝你。 –

-1

我認爲你需要通過你的自我生成唯一的ID。由於用戶可以有多個對象。所以也許圖像ID可以被命名爲這樣的

userId-objectId-somesalt 

+0

沒有足夠的具體IMO - 它與eugene基本相同 –

+0

@ Daij-Djan說看看回答時間。當我試圖回答它時沒有答案 – fengd

0

感謝@ Daij-Djan。我創建了斯威夫特版本:

 var itemObjectId:String = item.objectID.URIRepresentation().absoluteString! 
    var fileName = NSString(format:"%@.png", FileHelper.sanitizeFileNameString(itemObjectId)) as String 

幫手的sanitize:

struct FileHelper { 
static func sanitizeFileNameString(fileName:String) ->String { 
    let illegalFileNameCharacters:NSCharacterSet = NSCharacterSet(charactersInString: "/\\?%*|\"<>") 
    let components : [String] = fileName.componentsSeparatedByCharactersInSet(illegalFileNameCharacters) 
    let joinedString = join("", components) 
    return joinedString 
} 

}