2012-03-30 5 views
0

NSArrays/NSDictionaryの保存に関するさまざまな質問がありましたが、いくつかのサブ要素UIImagesです。NSArrayにはUIImages(およびその他)のNSArrayを含むNSArrayを保存します

少しコンテキストを与えるために、アプリは本質的にブログタイプのアプリです。ユーザーが新しいエントリを構成した場合、そのポストには、次の含めることができます。自分の写真アルバムから

  • 最大3枚の画像を
  • テキスト
  • 場所
  • 本質的には

、私はよユーザーがブログ投稿を一時的にキャンセルすることを決定した場合、アプリに「ドラフトを保存」機能を実装しようとしています。ユーザーがブログ投稿をキャンセルすると、ドラフトを保存するかどうかをUIActionSheetで尋ねられます。ユーザーが再度投稿したい場合、保存した下書きで中断した場所から開始することができます。

この時点で、私はこれらの次のオブジェクト保存する必要があります:私は「ドラフトの保存」functinalityを行うために、上記1〜4のデータを保存する必要があることを考えると

1) NSArray of selected photos 
---> contains NSDictionaries (up to 3) 
--------> UIImage (large sized version) 
--------> UIImage (thumbnail sized version) 

2) NSDictionary of NSValues (just some view x,y position data) 

3) Text -- NSString data of the blog text they have written 

4) Location text -- NString data of their current location 

は、何でありますこれを行う最善の方法は?このデータをすべて保持する特別なクラスを作成する必要がありますか?また、ディスクに保存する前にまずUIImagesをNSDataにする必要がありますか?

ありがとうございました!

答えて

1

はいクラス/モデルのような構造は、より意味を持ち扱いが容易です。 何かlike-

Interface Blogdata 
    NSArray *selectedPhoto; 
    NSDictionary *positionValues; 
    NSString *blogText; 
    NSString *locationText; 

、その後、あなたは写真データのための1つの以上のモデルを作ることができます。

Interface Photodata 
    NSDictionary *photo; 
    UIImage *largeImage; 
    UIImage *thumbImage; 
+0

ありがとう、私はまだUIImageの処理について混乱していると思います。 UIImageオブジェクトを使用したPhotodataのモデルを作成するとします。 UIImageオブジェクトはそのままシリアル化されますか、最初にそれらをNSDataに変換してからPhotodataをシリアル化する必要がありますか? – kurisukun

+0

NSDataをお持ちの場合は、どちらの方法でも使用できます.1。UIImageの代わりにNSDataに格納し、そのイメージが必要なときに変換します(ビットメモリが消費されます)。2.storeは直接uiimageに入ります(nsdataからuiimageへの変換後) – rishi

1

あなたが言及したすべてのプロパティは、Blogクラスに属しているようです。それらはすでにグループ化されていますか? Blogオブジェクトは、あなたが言及した4つのものであるオブジェクトの変数(プロパティ)でドラフトの状態を取得できます。 BlogオブジェクトをNSDataとして保存し、ユーザーがドラフトを再度必要とするときに読み取ることができます。

この利点は、毎回4つの保存(および取得)について考える必要がなく、1つのオブジェクトの保存について心配することだけです。

+0

この時点ではまだクラスには入っていませんが、そうするのは間違いありません。しかし、たとえBlogクラスを作成しても、UIImagesをNSDataに変換する必要はありません。または、BlogクラスはUIImagesをそのまま持ち、Blogクラス自体をNSDataとして保存できますか? – kurisukun

1

最も簡単な方法は、アプリケーションのドキュメントフォルダに画像を保存し、drafts.plist内のテキストとして表現することができ、ファイル名やその他のデータのNSArrayのを保存することです。

filenameStr = [NSString stringWithFormat:@"image1.png"]; 
fileManager = [NSFileManager defaultManager]; 
paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
documentsDirectory = [paths objectAtIndex:0]; 
imagePath = [documentsDirectory stringByAppendingString:@"/"]; 
imagePath = [imagePath stringByAppendingString:filenameStr]; 
NSData *imageData = UIImagePNGRepresentation(myImage); 
[imageData writeToFile:imagePath atomically:YES]; 
関連する問題