0

このメソッドを使用してアプリを完成させました。実装している最後の呼び出しは、解析する必要がある単純な JSON 応答であり、次のようになります。

[__NSCFString objectAtIndexedSubscript:]: インスタンス 0x17005caa0 に送信された認識されないセレクター

このウェブサイトにはこのような似たような質問がたくさんありますが、私は彼らが指示したようにすべてをやっていますが、まだ運がありません.
これは、responseObject にネストされた JSON です。送信しているリクエストが正しいことを意味する responseObject を取得しています。

[[manager dataTaskWithRequest:req completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error){
        if (!error) {
            if (response) {
                allResponse = [[NSMutableArray alloc] init];
                allPractice = [[NSMutableArray alloc] init];
                allProvider = [[NSMutableArray alloc] init];

                allFirstName = [[NSMutableArray alloc] init];
                allMiddleName = [[NSMutableArray alloc] init];
                allLastName = [[NSMutableArray alloc] init];
                allPracticeName = [[NSMutableArray alloc] init];

                allResponse = responseObject;
                allPractice = [allResponse valueForKey:@"Practice"];
                allProvider = [allResponse valueForKey:@"Provider"];

                allFirstName = [allProvider valueForKey:@"FirstName"];
                allMiddleName = [allProvider valueForKey:@"MiddleName"];
                allLastName = [allProvider valueForKey:@"LastName"];
                allPracticeName = [allPractice valueForKey:@"PracticeAlias"];

                [self.tableView reloadData];
                [SVProgressHUD dismiss];

            }}

これが、ResponseObjects として取得している構造です。

{
    AccountType = 2;
    CreatedBy = smith;
    CreatedDate = "2016-01-25T02:07:42.45";
    DisplayName = ",  ";
    Email = "<null>";
    ErrorMessage = "<null>";
    FirstName = "<null>";
    ID = 1;
    IsActive = 1;
    Password = test;
    Phone = "<null>";
    Practice =     {
PracticeAlias = “SAMPLE MEDICAL GROUP";
};
    PracticeAlias = "<null>";
    PracticeCode = "<null>";
    PracticeID = 1;
Provider =     {
    AccountType = 0;
    CreatedBy = smith;
    LastName = John;
    MiddleName = "";
    FirstName = Smith;
};
    Staff = "<null>";
    lstPractice = "<null>";
    lstProvider = "<null>";
    pageSize = 0;
}

だからcellForRowAtIndexPath私がこれをするとき:

NSLog(@"%@", [NSString stringWithFormat:@"%@",allPracticeName[indexPath.row]]);

上記で共有したメッセージでアプリがクラッシュします。

4

2 に答える 2

2

2行を見てください

            allResponse = [[NSMutableArray alloc] init];
            allResponse = responseObject;

それはナンセンスです。allResponse を新しく作成した可変配列に設定し、それを responseObject に置き換えます。そして、何のチェックもありません。予期しないデータがあると、アプリがクラッシュします。

responseObject を NSDictionary* にしてから、実際に NSDictionary* であることを確認してください。たとえば、responseObject [@"Practice"] を使用する代わりに、非常に正当な理由がない限り、valueForKey を使用しないでください。そして、それらのタイプも確認してください。

于 2016-11-11T16:26:35.373 に答える