2011-10-19 21 views
0

私はサイト上でこれに類似したいくつかの他の人々の問題を見てきましたが、これを解決する助けとなるものは何も見つかりませんでした...だから私は同じテキストファイルディレクトリを私のメインプログラムとして使用しています。また、プロジェクト自体にコードをインポートしています。コードはその出力に続いています。提案は歓迎です、ありがとうございます!Objective Cでテキストファイルを読む

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"allshows" 
            ofType:@"txt"]; 
NSLog(@"filePath: %@", filePath); 

NSString *fileString = [NSString stringWithContentsOfFile:filePath]; 
NSLog(@"fileString: %@", fileString); 

NSArray *lines = [fileString componentsSeparatedByString:@"\n"]; 
NSLog(@"arrayLines: %@", lines); 

、出力は次のようになります。私が述べたように

filePath: (null) 
fileString: (null) 
arrayLines: (null) 

、ファイル「allshows.txtは」「Epguides.m」(メインディレクトリ)と同じディレクトリにあります。

何が不足していると思いますか?これは明らかではない場合は、目標Cのプログラムで私の最初の実際の試みです

ありがとう!

解決済み - あなたの努力を感謝します。

+2

プロジェクトにファイルが含まれていますか?それ以外の場合は、コンパイルプロセスでアプリケーションにバンドルされず、実行時にアクセスできない –

+0

私はそう思う、私は実際のプロジェクトウィンドウにファイルを追加しました。プロジェクト>プロジェクトに追加>ファイルを選択してください残りのプロジェクトと共にプロジェクト内のファイルのリストにポップアップ表示されます。 – Didier

+0

プロジェクト設定でプロジェクトをチェックして、ビルドのコピーリソースステージに含まれていることを確認できます。これはあなたの目標に達してからビルド段階を経てバンドルリソースをコピーします – utahwithak

答えて

1

は、これは私が現在のプロジェクトで使用しています方法であり、パスと内容を取得するため、この代替方法を試してみてください。

NSString *path = [[NSBundle mainBundle] bundlePath]; 
NSString *xmlPath = [path stringByAppendingPathComponent:@"periodic.xml"]; 
NSString *xmlString = [NSString stringWithContentsOfFile:xmlPath encoding:NSUTF8StringEncoding error:nil]; 

それは、XMLをロードしているが、それはとにかく単なるプレーンテキストで、動作するはずですあなたのために

+0

提案した変更を行いましたが、まだ運がない/出力は次のようになります: パス:/ Users/Didier/Documents/Programming/EpGuides/theList/EpGuides /Users/Didier/Documents/Programming/EpGuides/theList/EpGuides/build/Debug/allshows.txt xmlString::/ /デバッグ xmlPath構築(ヌル) を私も見ているデバッグフォルダにコピーを置きますそれが助けになるなら、何も変わっていないようだ。( – Didier

0

ターゲットにそのファイルが含まれていることを確認してください。ただプログラムでそれを持っているだけでは不十分です。具体的には、そのターゲットのビルドステップでは、出力ディレクトリにコピーされていることを確認してください。 (人々のよくある間違いは、自分のプロジェクトがどこにあるのか、あるいはデバッグの代わりに 'リリース'のbinフォルダにあるのか、あるいはその逆であるのかを見極めることです。(そして、それをステップに追加する場合は、それはあなたがコンパイルしてビルドするたびに上書きされることを。)

0

その名前に一致するバンドル内のファイルがないので、あなたが戻ってpathForResource呼び出しからnullを取得している理由がある。

それは中だという理由だけで

ターゲットのビルド設定の[バンドルリソースのコピー]ステップを確認して、ファイルがiにリストされていることを確認してくださいそこにn。

+0

私は新しいコピーバンドルリソースフェーズを追加してそれにファイルを追加したので、私はそれが始まったとは思わないが、同じ問題が起きている。そのような場合、ツリーは次のようになります。 http://didierd.co.uk/CBR.png – Didier

+0

'[[NSBundle mainBundle] bundlePath]はあなたに何を与えるのですか?このディレクトリの中身は何ですか? –

+0

ありがとう!これを稼働させることができました!ちょうど配列から1つの要素を印刷する方法を理解する必要があります(つまり、行[0]、行[1]など.. Javaでは、何らかのアイディアがありますが、客観的なCの場合はそうです)。あなたのすべての仲間のためにあなた! – Didier

0

上記のとおり、「allshows.txt」というファイルは、 「Epguides.m」(メインディレクトリ)と同じディレクトリにあります。

「メインディレクトリ」とは、アプリケーションバンドルまたはコンパイルされているディレクトリを意味しますか?

私は後者を信じています。この場合、あなたはNSBundleを間違って使用しています。 NSBundleは、あなたのコンパイルディレクトリにあるファイルではなく、あなたのアプリケーションバンドルにあるファイルを探します。

アプリのバンドルに何かを追加するには、次の手順に従います。 1.グループディレクトリ "Supporting Files"内のXcodeプロジェクト(この場合はallshows.txt)に項目をドラッグします(追加する必要はありませんが、そこから追加することもできます)。 2.左側のプロジェクトを選択し、[ビルド段階]タブに移動します。 3.ファイルが「バンドルリソースのコピー」にまだない場合は、単にドラッグアンドドロップして追加します。

これを実行すると、実行しようとしていることを達成できるはずです。

PS。私がコンパイルディレクトリとアプリケーションバンドルに関する私の仮定で間違っていた場合。 ofTypeに@ ""を渡してみてください。タイプはNSBundleへのヒントで、より高速な検索が可能です。

関連する問題