• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:obj-c iOSのローカルディスク上にデータ保存)

Objective-C iOSのローカルディスク上にデータ保存

このQ&Aのポイント
  • Objective-Cを使ってiOSのローカルディスク上にデータを保存する方法について教えてください。
  • iPhone/iPad上で動作するシンプルなプログラムを作成する際、テキストファイルとしてデータを保存し、再度読み込む方法を知りたいです。
  • NSFileManagerクラスを使用してデータをローカルに保存する方法について詳しく教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.2

ディレクトリの操作を行うクラスを、NSFileManagerといいます。それとは別に、ファイルオープン、クローズ、リード、ライトを行うクラスを、NSFileHandleといいます。 NSFileManager http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSFileManager_Class/Reference/Reference.html#//apple_ref/occ/cl/NSFileManager NSFileHandle http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSFileHandle_Class/Reference/Reference.html#//apple_ref/occ/cl/NSFileHandle Low-Level File Management Programming Topics http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/LowLevelFileMgmt/Introduction.html#//apple_ref/doc/uid/10000055i しかし、よりかんたんにファイルの読み書きができるメソッドが、NSStringに用意されているので、そちらを使ったほうがいいでしょう。 NSString http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSString_Class/ ファイル読み出し - (id)initWithContentsOfFile:(NSString *)path encoding:(NSStringEncoding)enc error:(NSError **)error ファイル書き込み - (BOOL)writeToFile:(NSString *)path atomically:(BOOL)useAuxiliaryFile encoding:(NSStringEncoding)enc error:(NSError **)error iOSでは、ユーザが読み書きできるディスク上の領域が、アプリごとに決まっています。 ホームディレクトリを取得する関数。 NSString * NSHomeDirectory (void) 書類ファイルを保存する場所は、Documentsフォルダと決まっています。Documentフォルダのパスを取得するには、次のコードを使います。 NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); if ([paths count] > 0) { NSString *userDocumentsPath = [paths objectAtIndex:0]; } ※「NSDefault」は、NSUserDefaultsのことだと思いますが、これはアプリの環境設定ファイルにアクセスするクラスです。書類の読み書きとは、性質が異なります。

michael_u
質問者

補足

詳しく教えてくださってありがとうございます。 試しにNSStringクラスでファイルの読み書きに挑戦してみようと思います。 その後、自分でWeb検索を続けた結果、StackOverflow のフォーラムでアップグレード時にデータが失われるのを防ぐために、アプリケーションのDocumentsフォルダに保存したほうがいい、というような投稿を見つけました。http://stackoverflow.com/questions/307313/best-way-to-save-data-on-the-iphone あとsqliteを使うのも良い、という記述も見かけました。 将来的には、iPhone/iPadを放置しておいて、バックグラウンドでデータを作成し、1日毎に指定のメールアドレスにそのファイルを送信する、もしくはサーバにアップロードする、というような事が目的です。 そのファイルのデータ解析をWindowsの方でする予定なので、データのフォーマットに互換性を持たせたいのですが、(例えばcsvファイルとかxmlファイルとか)、sqliteでも問題ないのでしょうか? 重ねての質問になりましたので、お暇なときにでもご回答いただければ幸いです。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (2)

  • harawo
  • ベストアンサー率58% (3742/6450)
回答No.3

> そのファイルのデータ解析をWindowsの方でする予定なので、データのフォーマットに互換性を持たせたいのですが、(例えばcsvファイルとかxmlファイルとか)、sqliteでも問題ないのでしょうか? NSStringを直接ファイル保存すると、プレーンテキストになりますので、OSに依存しないテキストファイルになります。とうぜん仕様に沿って、テキストを成形すれば、CSVになります。 XMLで書き出すこともできます。 Serialization http://developer.apple.com/library/ios/documentation/Cocoa/Conceptual/Archiving/Articles/serializations.html#//apple_ref/doc/uid/20000947-BCIEBEGI NSPropertyListSerialization Class Reference http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSPropertyListSerialization_Class/Reference/Reference.html#//apple_ref/occ/cl/NSPropertyListSerialization SQliteのことはわかりません。

全文を見る
すると、全ての回答が全文表示されます。
回答No.1

NSData クラスの writeToFile:atomically: でファイルへの書き込み dataWithContentsOfFile: でファイルからの読み込み が可能です。 http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSData_Class/Reference/Reference.html 読み書き可能なフォルダは、アプリケーションのホーム ( NSHomeDirectory() で取得可能 ) 直下の Documents tmp Library/Preferences に限定されるようです。 あと、NSUserDefaults が便利でいいんじゃないかと思います。 http://developer.apple.com/library/ios/#documentation/Cocoa/Reference/Foundation/Classes/NSUserDefaults_Class/Reference/Reference.html#//apple_ref/doc/uid/TP40003764 http://iphone-dev.g.hatena.ne.jp/tokorom/20090520/1242789479

michael_u
質問者

補足

ありがとうございます。大変参考になります。 NSHomeDirectory()、使い方がまだまだわからないのですが、調べてみます。 重ねてお尋ねしたいのですが、NSUserDefaultsクラスはiPhoneの電源が切れて再度起動しなおしたときにもデータは残るのでしょうか?

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VC++のデータ保存について

     いつもお世話になっております。VC++でプログラムを作成しているプログラミング初心者です。環境はOSがWindowsXP、統合環境はVisualStudio2008Professionalを使用しています。  現在簡易な家計簿ソフトを製作しているのですが、データの保存がうまくいきません。プログラムの動作としては、データの保存先を「名前をつけて保存」のコモンダイアログで指定し、それをクラスのフィールドに保存します。更にそのクラスのフィールドから、Path.txtというファイルにpath名を保存します。プログラムの起動時にこのPath.txtを読み込み、その中身をクラスのフィールドにセットします。その後、「ファイルの読み込み」をメニューで選択する時に、クラスのフィールドを引数として、データを読み込む関数を呼び出します。  この方法で、デバックモードでは動作していたのですが、リリースモードではPath.txtにファイルの保存先が書き込まれず、うまく動作しませんでした。以下、関係のあると思われる所を抜粋しました。 *****ファイルの保存先path名の保存***** private: void Pathset() { StreamWriter^ writer2 = gcnew StreamWriter("path.txt");     // パスデータを書き込み writer2->WriteLine(this->report7->Pathname); // クラスのフィールドからデータを取り出し書き込み writer2->Close(); } *****Form1クラスの生成直後に、クラスのフィールドにpath名を格納する***** StreamReader^ reader2 = gcnew StreamReader("path.txt"); this->report7->Pathname = ""; this->report7->Pathname = reader2->ReadLine(); reader2->Close(); *****メニューでファイルの読み込みを選択したときの処理***** LoadCsvFile(this->report7->Pathname); // LoadCsvFileはファイルの読み込みを実行する関数  以上、長く拙い説明で申し訳ありませんが、原因が分かる方、よろしくお願いいたします。m(_)m

  • データの保存方法について

    VB.netについての質問です。 フォームにテキストボックスとコンボボックスとボタンが取り付けられている状態で、ボタンを押すとテキストボックスとコンボボックスのデータを、指定したフォルダにテキストファイルで保存させる、というプログラムは可能でしょうか? 保存形式はテキストファイル以外でも構いません。 よろしくお願いします。

  • ローカルディスクが開けなくなった

    マイコンピューターの中の「ローカルディスク(C:)」をダブルクリックして開こうとしたら、「関連付けるプログラムの設定エラー」というウィンドウが出てきて開くことが出来ません・・・。そのウィンドウには、「pq1o2ga.cmdが見つかりません。このプログラムは、種類が‘ファイル’のファイルを実行するために必要です。次の実行可能ファイルを使用してファイルを実行する:」と書かれており、C:¥が選択されている状態で、その下に「OK」「キャンセル」「参照(B)」というボタンがあります。 このような事態が本当に初めてでその中に大事なファイルが保存されています・・・。どのような方法で元にもどすことが出来るのでしょうか?すみませんが教えてください。お願いします。

  • エクセルのマクロ(VBA?)でデータの取込と保存をしたいのですが?

    エクセルのマクロとVBAの違いもよくわかっていない素人ですが教えていただけると助かります。 ある値段情報AがテキストファイルまたはCSVファイルなどで保存してあり、それを1つずつ読み込み、エクセルのシート上のセルAに表示させる、それをマクロ?(プログラム)で、1つ目より2つ目のほうが高ければ、そのまま高いほうを表示させておき、安いほうは別のテキストファイルに書き込むようなことって可能ですか? つまり、処理するごとに、テキスト(CSV)のファイルからデータの読み込みと書き込みを行うようなことってできますか?もしできるのであれば、そのやり方について詳しく教えてください。詳しいホームページもあれば教えてください。よろしくお願いします。

  • Objective C(iPhone SDK)でテキストファイルから一

    Objective C(iPhone SDK)でテキストファイルから一行毎データを読み出す方法を教えてください. つい最近Objective-Cを始めた初心者です. サーバ上にあるテキストファイルを読み込み,一行ごとデータを取り出し,その一行ずつ取り出したデータをTableViewの項目として表示したいと思っています.現在コンパイルが出来ているのは, NSString* text; NSString* path = @"(URL)test.txt"; NSError* error; text = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:&error]; までです.また,読み込むテキストファイルの内容は 0001 0002 0003 0004 [EOF] となっています.このデータの一行ずつを配列に格納する方法を教えてください,よろしくお願いします.

  • C# 文字をリッチテキストで保存したい。

    例えば 「あいうえお」といった文字列を赤字で RTF(リッチテキストファイル)保存するにはどうすれば良いのでしょうか? RichTextBoxクラスを使ってやる方法は何となくわかったのですが、コンソールアプリケーションでわざわざWINDOWS.FORMSを使うのも変かなと思い質問させて戴きました。

  • C# Font情報を保存したい

    C#でアプリケーションを作っています。 (1)ユーザーの指定したFONT情報をファイルにセーブし、 (2)次回起動時にこのFONTでアプリケーションを起動・表示させる。 このようなFont情報はどのようにファイルに保存すればいいのでしょうか? 例えば、MSゴシック Size10 斜体 太字 といった情報です。 FontクラスにTostringのオーバーライドがあり、テキスト形式にはとりあえず書き出せるようですが、このテキスト形式のフォーマットがよくわからない為、出来ません (単に面倒だということもありますが)。 もっと簡単にFont情報のセーブ・ロードはできないものでしょうか?

  • C# 「データが失なわれる可能性を防ぐため、…」

    Visual Studio 2008 C# での質問です。 プログラムを作りこんでいくうちに、ソリューション・エクスプローラからデザイナの表示をクリックすると、 「データが失なわれる可能性を防ぐため、デザイナの読み込み前に以下のエラーを解決する必要があります。」 「ファイル内にデザインできるクラスがないため、このファイルのデザイナを表示できませんでした。ファイルの以下のクラスがデザイナで見つかりました。CRsvCalForm --- 基本クラス 'foo.Common.AbstructFooForm' を読み込めませんでした。アセンブリが参照されているか、およびすべてのプロジェクトがビルドされているかを確認してください。」 と表示されます。 修正したコードのフォームだけでなく、今まで手をつけていないフォームも表示できなくなりました。 SVN から(修正前の)「CRsvCalForm.cs」「CRsvCalForm.design.cs」「CRsvCalForm.resx」をエクスポートして Visual Studio を立ち上げても一緒の現象です。 SVN を直接 Visual Studio で開くと、正常に動いています。 「データが失なわれる可能性を防ぐため、デザイナの読み込み前に以下のエラーを解決する必要があります」でぐぐって見たのですが、有効そうなページは見つかりませんでした。 どなたか解決方法を知ってみえる方、ご教示いただきますようお願いします。

  • DBから取得したデータをCSVファイルとして保存する方法

    またまたお世話になります。 DBから取得したデータを任意のパス、ファイル名でCSV形式で保存する方法がわかりません。 具体的に書きますと・・・ 現在の状態 ・データは取得できている。 ・コモンダイアログコントロールのShowSaveメソッドで「ファイル名をつけて保存」ダイアログは表示できている。 現在の状態で「保存」ボタンを押下したときにファイル名が正常(拡張子がCSVかつファイル名入力欄が空白でないこと)な場合にファイル名で決定したファイルを作成したいのですが、ファイルの読み込みについては理解しているのですが、書き込みついては分かりません。 よろしくご教授ください。

  • etaxで保存データの読み込み

    etaxで所得申告書を作成中で保存しました。 再開したいので国税庁のホームページから 「作成再開」をクリックして保存データの読み込みのページにきました。 保存ファイル名の右端にある参照をクリックすると「アップロードするファイルの選択というウインドウが出て、その中に保存した作成中のがファイルがあります。 このファイルを青色反転し(選択し)元画面の緑色の保存データの読み込みボタンをクリックしても読み込みが始まる気配がありません。 困っています。 なお、ホームページの別の場所に保存ファイルのアイコンのダブルクリックはやらないようにとの 注意書きがありましたので、ダブルクリックはやっていません。 よろしくお願いいたします。

印鑑について
このQ&Aのポイント
  • 印鑑について気になることがあったので皆様の意見をお聞かせください。
  • 卒業祝いの贈り物としてもらった印鑑を使う際の問題に悩んでいます。
  • ハーフで名前が長いため、印鑑にどの部分を入れるか迷っています。
回答を見る

専門家に質問してみよう