2011-02-10 4 views
45

resourcesディレクトリのXMLファイルストアにアクセスしようとしています。 NSURLConnectionを使用してこのファイルにアクセスするためにNSURLを使用しています(このファイルは将来、リモートサービス用にスワップアウトされます)。NSURLを使用してローカルファイルにアクセスする

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL 
URLWithString:@"file:///XMLTest.xml"] 
cachePolicy:NSURLRequestUseProtocolCachePolicy timeoutInterval:60.0]; 

NSURLConnection *connection=[[NSURLConnection alloc] initWithRequest:request delegate:self]; 
if (connection) { 
    // Create the NSMutableData to hold the received data. 
    // receivedData is an instance variable declared elsewhere. 
    response = [[NSMutableData data] retain]; 
} else { 
    NSLog(@"Could not create connection"); 
} 

接続を開始したクラスは、NSURLConnectionのメソッドを実装します。

connection:willCacheResponse: 
connection:didReceiveData: 
connectionDidFinishLoading: 
connectionDidFinishLoading: 

私はシミュレータが死ぬこれを起動したら、私が見てする場所のための損失で午前ので、何もメッセージがコンソールに出力されません。すべてのアイデア、または私はちょうどこれを完全に間違っている?

答えて

17

また、これは動作します:

NSString *path = [[NSBundle mainBundle] pathForResource:@"XMLTest" ofType:@"xml"]; 

・ホープ、このことができます!

+1

これはURLではなくファイルシステムのパスを与えます。私は理由を理解していませんが、OPは彼のXMLをURLからロードしようとしています。 Webベースのソースへの移植を容易にするために... –

+0

もちろん。ありがとうSeva - あなたは本当に正しいです! –

+9

私の答えは正解とマークされていますが、私はSevaからの答えは実際に正しいと信じています!これは更新できますか? –

152

ファイルシステムから何かをロードしようとしましたルートは間違っています。間違いなくデバイスで間違っていて、おそらくシミュレータで間違っています。 resourcesディレクトリは、NSBundleクラスを介してアクセスする必要があります。例えば

、以下を使用し、リソースの "DATA.TXT" と呼ばれるファイルのURLを取得するには:

NSURL *MyURL = [[NSBundle mainBundle] 
    URLForResource: @"Data" withExtension:@"txt"]; 
+1

合意しました。これはリソースフォルダにアクセスする正しい方法です! –

+2

私はアプリケーションサンドボックスのルートにアクセスしたiOS上で「/」という印象を受けましたが、簡単に間違っている可能性があります。ここで私はURLを取得するために使用したコードですが、アプリケーションはまだまだ爆発しますが、これはもっとスマートな動きのようです。 NSURL * url = [[NSBundle mainBundle] URLForResource:@ "XMLTest" withExtension:@ "xml"]; ' – botptr

+1

シミュレータ上で、/はホストコンピュータのルートを意味します。デバイスやシミュレータ上で大きく違った結果が得られることを意味します。とにかく、サンドボックスのルートはバンドルリソースフォルダと同じではありません。 –

2

あなたは、ファイルがデスクトップにあると仮定し、ここでこの

NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"file://localhost/Users/userName/Desktop/XMLTest.xml"]]; 

を試すことができます。あなたは簡単にNSURLのfileURLWithPathメソッドを使用して行うことができ

+2

これは一時的な足場には受け入れられ、役立ちます。 –

+0

私はファイルの絶対パスを使用しますが、これは私にとって役に立ちます。 – tomfriwel

31

あなたがパスからURLを取得したい場合は(あなたがNSTemporaryDirectory(内のファイルを作成したので、たとえば、)、あなたはURLとしてこれを取得する必要があります):

NSString* tempPath = NSTemporaryDirectory(); 
NSString* tempFile = [tempPath stringByAppendingPathComponent:fileName]; 
NSURL* URL = [NSURL fileURLWithPath:tempFile]; 

+ URLWithString:と他の方法よりもずっと簡単です。

+4

これは正しい方法です、 '+ fileURLWithPath:' PUMP UP! –

1

スウィフト3:

let myFileName = "somefilename" 
    let myURL = Bundle.main.url(forResource: myFileName, withExtension: "png") 
関連する問題