2

Objective-C アプリケーションで json ファイルを読み込もうとしていますが、残念ながら RuntimeException が発生します。正確なエラーは次のとおりです。

*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'data parameter is nil'

私のjsonファイルは「Transactions.json」と呼ばれています

[{ "transaction": "300001", "date": "1/1/11", "type": "ABC", "status": "State1" },
  { "transaction": "300002", "date": "2/2/12", "type": "XYZ", "status": "State2" },
  { "transaction": "300003", "date": "3/3/13", "type": "ABC", "status": "State3" },
  { "transaction": "300004", "date": "2/2/12", "type": "XYZ", "status": "State2" },
  { "transaction": "300005", "date": "3/3/13", "type": "ABC", "status": "State3" },
  { "transaction": "300006", "date": "2/2/12", "type": "XYZ", "status": "State2" },
  { "transaction": "300007", "date": "3/3/13", "type": "ABC", "status": "State3" },
  { "transaction": "300008", "date": "2/2/12", "type": "XYZ", "status": "State2" },
  { "transaction": "300009", "date": "3/3/13", "type": "ABC", "status": "State3" },
  { "transaction": "300010", "date": "4/4/14", "type": "XYZ", "status": "State4" } ]

ファイルを読み込む私のメソッドは次のようになります。

int main(int argc, const char * argv[])
{

    @autoreleasepool {
        // Create the managed object context
        NSManagedObjectContext *context = managedObjectContext();

        // Custom code here...
        // Save the managed object context
        NSError *error = nil;
        if (![context save:&error]) {
            NSLog(@"Error while saving %@", ([error localizedDescription] != nil) ? [error localizedDescription] : @"Unknown Error");
            exit(1);
        }

        NSError *err = nil;
        NSString *dataPath = [[NSBundle mainBundle] pathForResource:@"Transactions" ofType:@"json"];
        NSLog(@"Hello: %@", dataPath);
        NSArray *transaction = [NSJSONSerialization JSONObjectWithData:[NSData dataWithContentsOfFile:dataPath] options:kNilOptions error:&err];

                NSLog(@"Transaction list: %@", transaction);

    }

    return 0;
}

私が理解していないのは、JSON ファイルを読み込んでいるときに NSData オブジェクトが null になるのはなぜですか? 誰かが私が間違っていることを見ることができますか? 念のため、JSON ファイル内の不要なスペースをチェックして、JSON ファイルをアプリケーション フォルダー内の別の場所に配置しようとしましたが、何も機能しませんでした。

回答者全員に事前に感謝します。

4

1 に答える 1

2

ソースコードとコメントから、アプリケーションは「コマンドラインツール」として構築されていると思います。その場合、JSON ファイルなどのカスタム リソース ファイルでは、[Target MemberShip] チェックボックスが実際には無効になっています。

回避策として:

  • ターゲットの「ビルド フェーズ」に進みます。
  • [ビルド フェーズの追加] をクリックし、[コピー ファイルの追加] を選択します。
  • 新しいビルド フェーズで、+JSON ファイルをクリックして選択します。

コマンド ライン ツールの場合、どの「宛先」を選択しても問題ないようです。「Destination: Resources」でテストしました。JSON ファイルは、実行可能ファイルを含む同じディレクトリーにコピーされます。今

[[NSBundle mainBundle] pathForResource:@"Transactions" ofType:@"json"];

そのパスを返す必要があり、アプリケーションからファイルを読み取ることができます。

于 2013-07-17T18:58:21.030 に答える