我知道這將有點難以回答,但我需要將文本和圖像保存到一個文件(如photoshop)。我應該製作一個自定義文件類型,還是有另一種方法來做到這一點?如何創建保存文本和圖像的自定義文件類型?
如果我需要一個自定義文件類型,有人請給我鏈接的東西,可以幫助我使文件類型存儲數據正確嗎?如果有另一種方式,我該怎麼做?
注意:我在導入三幅圖像的應用程序中使用此功能,並且允許用戶將文字置於其上,因此我可能無法以任何方式獲取以圖像形式存儲圖像所需的信息。如果這是我必須做的,我需要一個鏈接來獲取一些有用的信息。
我知道這將有點難以回答,但我需要將文本和圖像保存到一個文件(如photoshop)。我應該製作一個自定義文件類型,還是有另一種方法來做到這一點?如何創建保存文本和圖像的自定義文件類型?
如果我需要一個自定義文件類型,有人請給我鏈接的東西,可以幫助我使文件類型存儲數據正確嗎?如果有另一種方式,我該怎麼做?
注意:我在導入三幅圖像的應用程序中使用此功能,並且允許用戶將文字置於其上,因此我可能無法以任何方式獲取以圖像形式存儲圖像所需的信息。如果這是我必須做的,我需要一個鏈接來獲取一些有用的信息。
將對象保存到文件的簡單方法是將它們添加到NSDictionary
,然後使用NSArchiver
將字典存檔到數據中。
例如,在基於文檔的應用程序:
- (NSData *)dataOfType:(NSString *)typeName error:(NSError **)outError {
if ([typeName isEqualToString:@"YourTypeName"]) {
//Create a Dictionary
NSMutableDictionary *dictToSave = [NSMutableDictionary dictionary];
//Add the first image to the dictionary
[dictToSave setObject:image1 forKey:@"Image1"];
//Add the first image's text
[dictToSave setObject:image1text forKey:@"Image1Text"];
//etc.
[dictToSave setObject:image2 forKey:@"Image2"];
[dictToSave setObject:image2text forKey:@"Image2Text"];
[dictToSave setObject:image3 forKey:@"Image3"];
[dictToSave setObject:image3text forKey:@"Image3Text"];
//Return the archived data
return [NSArchiver archivedDataWithRootObject:dictToSave];
}
//Don't generate an error
outError = NULL;
return nil;
}
要讀取這些數據,只是取消歸檔字典,並設置對象:
- (BOOL)readFromData:(NSData *)data ofType:(NSString *)typeName
error:(NSError **)outError {
if ([typeName isEqualToString:@"MyTypeName"]) {
NSMutableDictionary *readDict =
[NSUnarchiver unarchiveRootObjectWithData:data];
image1 = [readDict objectForKey:@"Image1"];
image1text = [readDict objectForKey:@"Image1Text"];
image2 = [readDict objectForKey:@"Image2"];
image2text = [readDict objectForKey:@"Image2Text"];
image3 = [readDict objectForKey:@"Image3"];
image3text = [readDict objectForKey:@"Image3Text"];
}
outError = NULL;
return YES;
}
您還需要定義您的自定義文件類型在您的應用程序的plist文件中。
謝謝。我會盡快找到我的電腦。 – Justin 2011-04-26 14:38:51
當你走在正確的軌道上時,你發佈的代碼就像現在這樣,有許多問題。 'NSMutableDictionary * dictToSave; //創建一個Dictionary不會創建一個字典,它只會定義它。當您嘗試將消息發送給未定義的對象時,以下幾行可能會崩潰。 'unimpErr'(未實現的錯誤)可能會被刪除,因爲它只能作爲佔位符代碼,直到你實現了自己的代碼,這就是上面的代碼。 – NSGod 2011-04-26 20:10:20
我知道如何解決這個問題。非常感謝,@NSGod和@spudwaffle。 – Justin 2011-04-26 22:08:48
你能描述一下你的數據安排嗎?例如,圖像位於數組中的「NSImage」對象中?你在使用'NSDocument'子類嗎?當你說「導入三個圖像」時,這些是用戶選擇的三個任意圖像?另外,你是否試圖創建一個可以被其他應用程序打開的新的_image_文件,或者只是存儲用戶所做的工作,以便_your_應用程序可以再次打開它? – 2011-04-26 03:21:16
然後我會更新這個tomarrow。感謝您告訴我需要更多信息。 – Justin 2011-04-26 03:28:42
你不需要任何花哨的東西;這裏有幾種不同的可能性,並且提供更好的建議和更詳細的信息是最容易的。 – 2011-04-26 03:32:42