2

xml ファイルを解析して iOS アプリに入れます。まあ、xmlファイルのURLだけならできたのですが、Xcodeプロジェクトの場合は解析できるようにしたいです。だから私は次のコードを使用しました:

NSURL *xmlFile = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"Prices" ofType:@"xml"]];

NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithContentsOfURL:xmlFile];

しかし、それは解析されません。次のものも使用しました

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"Prices.xml"];
NSData *data = [[NSData alloc]initWithContentsOfFile:path];
NSXMLParser *xmlParser = [[NSXMLParser alloc]initWithData:data];

まだ解析していませんが、URLから解析すると機能します

NSURL *url = [[NSURL alloc] initWithString:@"http://myurl/Data.xml"];

NSXMLParser *xmlParser = [[NSXMLParser alloc] initWithContentsOfURL:url];

URLを使用せずにプロジェクト内のファイルを解析する必要がありますが、同様の質問をたくさん検索した後でも、まだできません。

4

1 に答える 1

3

あなたの xml ファイルは、アプリ ターゲットのメンバーではないため、アプリ バンドルの一部ではないため、読み込めないと思います。

正確な問題を把握するために、NSURL 構築ロジックを複数の行に分割します。

NSString *path = [[NSBundle mainBundle]pathForResource:@"Prices" ofType:@"xml"];
NSAssert(path, @"File does not exist in bundle! Check Target Membership. Or check for exact(!) filename match");
NSURL *xmlFile = [NSURL fileURLWithPath:path];
NSAssert(xmlFile, @"Could not create url from path. This should not happen because your problem is most likely in the path ;-)");

このコードはそれをチェックしpathxmlFilenil ではありません。pathバンドル内に Price.xml が見つからなかった場合は nil になります。

アプリが最初に例外をスローする場合NSAssert: Xcode で xml ファイルを選択し、[ファイル インスペクター] ペインを開き、[ターゲット メンバーシップ] で xml ファイルをアプリ ターゲットの一部にします。

これらのアサートのいずれでも例外がスローされない場合は、「解析しない」とはどういう意味かを定義する必要があります。(またはアサートを有効にする)

于 2013-08-20T08:25:17.327 に答える