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で質問しましょう!
似たような質問が見つかりました
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(プログラミング・Web制作) Windowsのマクロプログラムで、こんなことできますか? 3 2022/06/28 14:30
- Visual Basic(VBA) エクセルのマクロについて教えてください。 2 2023/07/21 09:42
- Word(ワード) PCで作ったwordをスマホで編集しようとすると「このファイルは読み取り専用です。」と表示される。 3 2023/05/30 14:51
- Visual Basic(VBA) Excel VBA 同じ名前のフォルダがあれば作成したブックを格納するマクロをつくりたい 2 2023/01/16 16:19
- その他(スマートフォン・携帯電話・VR) Android からiPhoneに乗りかえます。データを移動させるのは"iOSへ移行"というアプリを 4 2022/06/02 21:43
- ドライブ・ストレージ 古い外付けHDDから新品外付けHDDへのデータ移行方法 (Mac) 2 2022/12/11 02:01
- PHP PHPでテキストファイルに保存した時の改行問題 1 2022/11/19 15:07
- iOS iPhone用動画保存アプリiCapのデータは外付けUSBメモリに保存できますか? 1 2022/10/18 17:48
- その他(IT・Webサービス) MacとiPhone両方をお持ちの方に質問です!写真や動画はどこにどのように保存されていますか? ( 5 2022/09/05 11:50
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
dataファイルをxtxファイルにす...
-
Excelマクロでの再読込み方法
-
fprintfで文字化け
-
データをファイルに書き込むと...
-
インクルードファイルとインラ...
-
【C&C++】指定行のみファイル書...
-
バッチファイルでD&Dしたファイ...
-
C言語について
-
大きいサイズのテキストファイ...
-
VB6(windowsXP)でTextBoxのプロ...
-
CSVファイル
-
Arduinoでのライブラリファイル...
-
Javascript で INI の読み書き
-
どんなプログラムを書いても指...
-
リストビュー ⇔ 別ファイル構...
-
バッファとは何ですか
-
ShellExecute、エクスプローラ...
-
WScript.Echo と msgbox
-
Access のレポートをPDFに変換...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語初心者の質問失礼します。
-
csvファイルを開かずに文字を検...
-
ファイル名の先頭にアンダース...
-
バッチで118項目のCSVを処理し...
-
テキストファイルの最終行を削...
-
CSVファイルへの保存の際、デー...
-
SGファイルって何ですか?
-
大きいサイズのテキストファイ...
-
ドラッグアンドドロップでファ...
-
分割コンパイルの#defineについて
-
グローバル変数のよくない使い...
-
iniファイルに追記がしたいです。
-
Excelマクロでの再読込み方法
-
C言語のfopenについて教えてく...
-
ハッシュの計算時間について
-
Javascript で INI の読み書き
-
VBAにてEXCEL以外のファイル(テ...
-
同じ名前のファイルを作った場...
-
ASP .NETでファイル選択ダイア...
-
VBに、Cのincludeのようなもの...
おすすめ情報