![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?e8efa67)
Objective-Cを勉強し始め、とりあえず自分で考えたiOS(iPhone/iPad)上で動くシンプルなプログラムを作成したいと思っています。
テキストフォーム欄に入力された文字列を、「保存」ボタンを押したら、iOS(iPhone/iPad)のハードディスク上にテキストファイルとして保存し、「読み込み」ボタンを押して、そのファイルの内容をテキストフィールド上に表示させる、というだけのものです。一旦iPhone/iPad の電源を落としても、その情報が記録されているという様にしたいです。
購入した書籍などにはNSDefaultというクラスを使ってメモリ上には保存できるようなことが紹介されているのですが、データをローカルに保存する方法が載っていません。
Webで検索をかけたところ、NSFileManager クラスを使用する、という記述を見かけます。しかし、Macのアプリ用に書かれていてiOS用ではないらしく、保存場所のパスが正しいのかよくわかりません。
上記のようなプログラムを書くにあたり、どのような方法がよいでしょうか?この本やサイトに載っていたよ、という情報でも構いません。お詳しい方いらっしゃいましたら、何かアドバイスをいただければと思います。
No.2ベストアンサー
- 回答日時:
ディレクトリの操作を行うクラスを、NSFileManagerといいます。
それとは別に、ファイルオープン、クローズ、リード、ライトを行うクラスを、NSFileHandleといいます。NSFileManager
http://developer.apple.com/library/ios/documenta …
NSFileHandle
http://developer.apple.com/library/ios/documenta …
Low-Level File Management Programming Topics
http://developer.apple.com/library/ios/documenta …
しかし、よりかんたんにファイルの読み書きができるメソッドが、NSStringに用意されているので、そちらを使ったほうがいいでしょう。
NSString
http://developer.apple.com/library/ios/documenta …
ファイル読み出し
- (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のことだと思いますが、これはアプリの環境設定ファイルにアクセスするクラスです。書類の読み書きとは、性質が異なります。
この回答への補足
詳しく教えてくださってありがとうございます。
試しにNSStringクラスでファイルの読み書きに挑戦してみようと思います。
その後、自分でWeb検索を続けた結果、StackOverflow のフォーラムでアップグレード時にデータが失われるのを防ぐために、アプリケーションのDocumentsフォルダに保存したほうがいい、というような投稿を見つけました。http://stackoverflow.com/questions/307313/best-w … あとsqliteを使うのも良い、という記述も見かけました。
将来的には、iPhone/iPadを放置しておいて、バックグラウンドでデータを作成し、1日毎に指定のメールアドレスにそのファイルを送信する、もしくはサーバにアップロードする、というような事が目的です。
そのファイルのデータ解析をWindowsの方でする予定なので、データのフォーマットに互換性を持たせたいのですが、(例えばcsvファイルとかxmlファイルとか)、sqliteでも問題ないのでしょうか?
重ねての質問になりましたので、お暇なときにでもご回答いただければ幸いです。
No.3
- 回答日時:
> そのファイルのデータ解析をWindowsの方でする予定なので、データのフォーマットに互換性を持たせたいのですが、(例えばcsvファイルとかxmlファイルとか)、sqliteでも問題ないのでしょうか?
NSStringを直接ファイル保存すると、プレーンテキストになりますので、OSに依存しないテキストファイルになります。とうぜん仕様に沿って、テキストを成形すれば、CSVになります。
XMLで書き出すこともできます。
Serialization
http://developer.apple.com/library/ios/documenta …
NSPropertyListSerialization Class Reference
http://developer.apple.com/library/ios/documenta …
SQliteのことはわかりません。
No.1
- 回答日時:
NSData クラスの
writeToFile:atomically: でファイルへの書き込み
dataWithContentsOfFile: でファイルからの読み込み
が可能です。
http://developer.apple.com/library/ios/#document …
読み書き可能なフォルダは、アプリケーションのホーム ( NSHomeDirectory() で取得可能 ) 直下の
Documents
tmp
Library/Preferences
に限定されるようです。
あと、NSUserDefaults が便利でいいんじゃないかと思います。
http://developer.apple.com/library/ios/#document …
http://iphone-dev.g.hatena.ne.jp/tokorom/2009052 …
この回答への補足
ありがとうございます。大変参考になります。
NSHomeDirectory()、使い方がまだまだわからないのですが、調べてみます。
重ねてお尋ねしたいのですが、NSUserDefaultsクラスはiPhoneの電源が切れて再度起動しなおしたときにもデータは残るのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・「I love you」 をかっこよく翻訳してみてください
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・昔のあなたへのアドバイス
- ・かっこよく答えてください!!
- ・あなたが好きな本屋さんを教えてください
- ・スタッフと宿泊客が全員斜め上を行くホテルのレビュー
- ・【大喜利】【投稿~8/27】 こんなガソリンスタンド二度と来るか!なぜそう思った?
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・【お題】動物のキャッチフレーズ
- ・【お題】甲子園での思い出の残し方
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・「それ、メッセージ花火でわざわざ伝えること?」
- ・自分用のお土産
- ・人生で一番お金がなかったとき
- ・一番好きなみそ汁の具材は?
- ・泣きながら食べたご飯の思い出
- ・ちょっと先の未来クイズ第1問
- ・ゴリラ向け動画サイト「ウホウホ動画」にありがちなこと
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
ハッシュの計算時間について
-
VBAにてEXCEL以外のファイル(テ...
-
2つのCSVファイルの比較
-
Wordファイルの結合
-
VB.NETによるプロセス間通信
-
ASP .NETでファイル選択ダイア...
-
【C#】リソースファイルの埋め...
-
テキストファイルの最終行を削...
-
csvファイルを開かずに文字を検...
-
VC++の外部依存関係
-
[VBScript]ファイルの入出力を...
-
RPGでファイル名(もしくはレコ...
-
VBに、Cのincludeのようなもの...
-
ファイル名の先頭にアンダース...
-
HANDLE無効について
-
テキストファイルの入力につい...
-
EXEファイルに画像ファイルの埋...
-
Javascript で INI の読み書き
-
javaで例外エラーが発生した際...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
テキストファイルの最終行を削...
-
Excelマクロでの再読込み方法
-
分割コンパイルの#defineについて
-
大きいサイズのテキストファイ...
-
グローバル変数のよくない使い...
-
ドラッグアンドドロップでファ...
-
VBAにてEXCEL以外のファイル(テ...
-
C言語のfopenについて教えてく...
-
iniファイルに追記がしたいです。
-
バッチで118項目のCSVを処理し...
-
【C#】リソースファイルの埋め...
-
FileOpen 関数で既にファイル...
-
VBに、Cのincludeのようなもの...
-
WAVファイル同士の結合が可...
-
ハッシュの計算時間について
おすすめ情報