2011-04-26 30 views
1

我知道這將有點難以回答,但我需要將文本和圖像保存到一個文件(如photoshop)。我應該製作一個自定義文件類型,還是有另一種方法來做到這一點?如何創建保存文本和圖像的自定義文件類型?

如果我需要一個自定義文件類型,有人請給我鏈接的東西,可以幫助我使文件類型存儲數據正確嗎?如果有另一種方式,我該怎麼做?

注意:我在導入三幅圖像的應用程序中使用此功能,並且允許用戶將文字置於其上,因此我可能無法以任何方式獲取以圖像形式存儲圖像所需的信息。如果這是我必須做的,我需要一個鏈接來獲取一些有用的信息。

+1

你能描述一下你的數據安排嗎?例如,圖像位於數組中的「NSImage」對象中?你在使用'NSDocument'子類嗎?當你說「導入三個圖像」時,這些是用戶選擇的三個任意圖像?另外,你是否試圖創建一個可以被其他應用程序打開的新的_image_文件,或者只是存儲用戶所做的工作,以便_your_應用程序可以再次打開它? – 2011-04-26 03:21:16

+0

然後我會更新這個tomarrow。感謝您告訴我需要更多信息。 – Justin 2011-04-26 03:28:42

+0

你不需要任何花哨的東西;這裏有幾種不同的可能性,並且提供更好的建議和更詳細的信息是最容易的。 – 2011-04-26 03:32:42

回答

2

將對象保存到文件的簡單方法是將它們添加到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文件中。

+0

謝謝。我會盡快找到我的電腦。 – Justin 2011-04-26 14:38:51

+2

當你走在正確的軌道上時,你發佈的代碼就像現在這樣,有許多問題。 'NSMutableDictionary * dictToSave; //創建一個Dictionary不會創建一個字典,它只會定義它。當您嘗試將消息發送給未定義的對象時,以下幾行可能會崩潰。 'unimpErr'(未實現的錯誤)可能會被刪除,因爲它只能作爲佔位符代碼,直到你實現了自己的代碼,這就是上面的代碼。 – NSGod 2011-04-26 20:10:20

+0

我知道如何解決這個問題。非常感謝,@NSGod和@spudwaffle。 – Justin 2011-04-26 22:08:48

相關問題