• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:iphoneアプリを初作成中でファイルオープンで困)

iPhoneアプリ初作成中でファイルオープンで困

このQ&Aのポイント
  • ボタンを押したらファイルから文字列を読み込み、表示するサンプルアプリを作成中。
  • ビルド後にボタンを押しても何の反応もなく、ファイルのロケーションを変えても解決しない。
  • Xcode4でプロジェクトとテキストファイルのロケーションを設定しているが、なぜうまく動かないのかわからない。

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

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

ファイルを開くには、まずそのファイルのパスを指定しなければいけません。たんにファイル名(@"text.txt" )を指示しただけでは、アプリケーションは、どこにそのファイルがあるのかわかりませんよね? iOSでは、Mac OS Xにならって、UNIX流のファイルパスを記述します。ディレクトリをスラッシュ(/)で区切り、ルート(パスの起点)を「/」で表します。たとえば、デスクトップにある「hoge.txt」のパスは、 /Users/(username)/Desktop/hoge.txt となります。 アプリをiOSシミュレータで動かした場合と、iPhone実機で動かした場合、とうぜんながらファイルを保存する場所(ファイルパス)は変わります。実行環境が変わっても、適切にファイルパスを取得するための関数が、iOSには用意されています。 NSArray * NSSearchPathForDirectoriesInDomains ( NSSearchPathDirectory directory, NSSearchPathDomainMask domainMask, BOOL expandTilde ); じっさいの使い方は、こちらのドキュメントに説明があります。 File System Programming Guide http://developer.apple.com/library/ios/#documentation/FileManagement/Conceptual/FileSystemProgrammingGUide/Introduction/Introduction.html アプリが扱うファイルには2種類あり、ドキュメント(書類)とリソースに分かれます。ドキュメントはふつうに読み書きする書類ファイルのことですが、リソースは、たとえばボタンや背景の画像とか、タップしたときに鳴る音声とか、アプリを構成する一部となるファイルを指します。リソースは環境設定ファイル(plist)を除き、書き換え不可、読み込みのみの属性になります。 リソースはプロジェクトに「プロジェクトに追加...」することで取り込みます。Finder上でプロジェクトフォルダに移動しても、リソースにはなりません。 リソースファイルへのパスの取得には、NSBundleクラスを利用します。 NSBundle http://developer.apple.com/library/ios/documentation/Cocoa/Reference/Foundation/Classes/NSBundle_Class/ 「text.txt」をリソースとして扱う場合、パスはつぎのコードで取得します。 NSBundle *bndl = [NSBundle mainBundle]; NSString *filePath = [bndl pathForResource: @"text" ofType: @"txt"];

wakanobonti
質問者

お礼

解決致しました。原因はご指摘の通りパス間違いです。 そして解説を読んで、なぜみなさんがパスをクラスを使って指定しているのかわかりました。(パスなんてベタ打ちでいいのにとか思ってました) ご丁寧な回答ありがとうございました。 他に回答して下さいました方々もありがとうございました。

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

その他の回答 (1)

  • SAYKA
  • ベストアンサー率34% (944/2776)
回答No.1

デスクトップに置いてあるからじゃない? 基本的にiPhoneのアプリはアプリ内にデータが置いてないと読み取らないし読み取れないよ。 通常はアプリ内の Documents や Library に目的のファイルを保存(ダウンロード含む)してそれを open するやりかたになるよ。 シミュレータ上でやるならシミュレータ用のappがuserホーム下に有る筈だからそれを開いて Documents なりに目的のtxtを放り込んでそこから読む様にしたらできるんじゃないかな。

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

関連するQ&A