2

私はクラスの友達を持っています

#import "Friend.h"
#import "AFJSONRequestOperation.h"
#import "UIImageView+AFNetworking.h"
#import "AFHTTPClient.h"

@implementation Friend

-(id)init {
    self = [super init];
    return self;
}

-(id)initWithSecret:(NSString *)theSecret
         userId:(NSString *)theUserId {
self = [super init];
if(self) {
    secret = theSecret;
    user_id = theUserId;
    /// get friends
    NSString *str = [NSString stringWithFormat:@"https://api.vk.com/method/friends.get?fields=first_name,last_name&uid=%@&access_token=%@", user_id, secret];
    NSURL *url = [[NSURL alloc] initWithString:str];
    NSURLRequest *friendRequest = [[NSURLRequest alloc] initWithURL:url];

    AFJSONRequestOperation *friendOperation = [AFJSONRequestOperation JSONRequestOperationWithRequest:friendRequest success:^(NSURLRequest *friendRequest, NSHTTPURLResponse *response, id JSON) {
        //converting to array
        NSArray *ar = [JSON valueForKey:@"response"];

        NSData *jsonAr = [NSJSONSerialization dataWithJSONObject:ar options:NSJSONWritingPrettyPrinted error:nil];
        friendsAr = [NSJSONSerialization JSONObjectWithData:jsonAr options:NSJSONReadingMutableContainers error:nil ];

        self.firstName = [friendsAr valueForKey:@"first_name"];
        self.lastName = [friendsAr valueForKey:@"last_name"];
        self.uid = [friendsAr valueForKey:@"uid"];

    } failure:^(NSURLRequest *friendRequest, NSHTTPURLResponse *response, NSError *error, id JSON) {
        NSLog(@"Request Failed with Error: %@, %@", error, error.userInfo);
    }];

    [friendOperation start];

}
return self;
}


@end

私の ViewController では、次のようなインスタンスを作成できます。

 self.myFriend = [[Friend alloc] initWithSecret:self.secret userId:self.user_id];

正常に動作しますが、配列を作成しようとすると:

NSMutableArray *persons = [NSMutableArray array];
    for (int i = 0; i < 165; i++) {
        self.myFriend = [[Friend alloc] initWithSecret:self.secret userId:self.user_id];
        [persons addObject: self.myFriend];
    }
    self.arrayOfPersons = [NSArray arrayWithArray:persons]; 

「キャッチされていない例外 'NSInvalidArgumentException' が原因でアプリを終了しています。理由: ' * +[NSJSONSerialization dataWithJSONObject:options:error:]: 値パラメーターは nil' です」というエラーでクラッシュします。誰が私が間違っているのか教えてもらえますか? ありがとうございました!

4

1 に答える 1

5

エラーはかなり明確です。あなたへの呼び出しでは、最初のパラメーターにNSJSONSerialization dataWithJSONObject:options:error:渡しています。nil

あなたが持っている:

NSData *jsonAr = [NSJSONSerialization dataWithJSONObject:ar options:NSJSONWritingPrettyPrinted error:nil];

これは、 であることを意味しarますnil

次のようになるのでar

NSArray *ar = [JSON valueForKey:@"response"];

これは、JSON(それが何であれ) プロパティの値があるnilか、値がないことを意味しresponseます。

デバッガーを簡単に使用し、問題のあるコードをステップ実行するときに値を確認するだけで、これらすべてがわかりました。

于 2013-09-19T20:09:33.157 に答える