1

私はiOS初心者ですが、コーディングに問題があります。ASIHTTPRequestを送信することにより:

NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json?geocode=37.781157,-122.398720,25km"];

私は次のようなデータを受け取ります:

            {
        "created_at" = "Fri, 25 Jan 2013 17:48:29 +0000";
        "from_user" = "ZacHWallS_SBI";
        "from_user_id" = 252712138;
        "from_user_id_str" = 252712138;
        "from_user_name" = "ZACH WALLS";
        geo = "<null>";
        id = 294864332490162176;
        "id_str" = 294864332490162176;
        "in_reply_to_status_id" = 294861687004225537;
        "in_reply_to_status_id_str" = 294861687004225537;
        "iso_language_code" = en;
        location = "BAY AREA CALIFORNIA";
        metadata =             {
            "result_type" = recent;
        };
        "profile_image_url" = "http://a0.twimg.com/profile_images/3029389178/e3567459d147bc5d0a10f3c797b477aa_normal.png";
        "profile_image_url_https" = "https://si0.twimg.com/profile_images/3029389178/e3567459d147bc5d0a10f3c797b477aa_normal.png";
        source = "&lt;a href=&quot;http://twitter.com/#!/download/ipad&quot;&gt;Twitter for iPad&lt;/a&gt;";
        text = "@LilTioSBi yee ima slide through prolly";
        "to_user" = LilTioSBi;
        "to_user_id" = 35629694;
        "to_user_id_str" = 35629694;
        "to_user_name" = "Nevin Tio";
    },

次に私はこれを行います:

-(void) requestFinished: (ASIHTTPRequest *) request {
NSString *theJSON = [request responseString];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSMutableArray *jsonDictionary = [parser objectWithString:theJSON];
//NSLog(@"\n\n%@", jsonDictionary);  
NSMutableArray *userName = [userinfo objectForKey:@"from_user"];
NSLog(@"\n\n\n%@",userName);

「from_user」をキャプチャする必要があります。次に実行すると、コンパイラは次のように言います。[__NSArrayM objectForKey:]:認識されないセレクタがインスタンス0x755bbc0に送信されました...どのように正しく実行しますか?

4

4 に答える 4

2

それで、私は何かを明確にすることから始めます、それはあなたに「[__ NSArrayM objectForKey:]:インスタンス0x755bbc0に送られた認識されないセレクター」エラーを実際に与えているのはランタイムです。

それを分解しましょう:

__NSArrayM不審に聞こえますNSArrayNSArray技術的にはクラスクラスターと呼ばれるNSArrayものです。つまり、実際には常に正確に表示されるとは限らず、1つのように機能するものです)。

-objectForKey:上の方法ですNSDictionary

したがって、辞書であると思われる配列でメソッドを呼び出しています(メソッドの呼び出し=メッセージの送信、またはObjC用語では「セレクター」)。

コードの一部を省略したようですが、次のようなものから値を渡した場合は次のようになります。

[jsonDictionary objectForKey:@"results"]

ツイートの配列になってしまいます。次に、その配列からアイテムを取得して、そのfrom_userキーを取得する必要があります。

NSArray *tweets = [jsonDictionary objectForKey:@"results"];
NSDictionary *tweet = [tweets objectAtIndex:0];
NSString *username = [tweet objectForKey:@"from_user"];
于 2013-01-25T18:34:30.080 に答える
0

あなたは使用する必要があります:

NSString *userName = [jsonDictionary objectForKey:@"from_user"];
于 2013-01-25T18:25:51.253 に答える
0

おそらく、あなたはツイートの配列を持っています。それで:

- (void) requestFinished: (ASIHTTPRequest *) request {
    NSString *theJSON = [request responseString];
    SBJsonParser *parser = [[SBJsonParser alloc] init];
    NSArray *parsedJson = [parser objectWithString:theJSON];

    NSMutableArray *allFromUsers = [NSMutableArray new];
    for (NSDictionary *tweet in parsedJson) {
        NSString *fromUser = [tweet objectForKey:@"from_user"];
        [allFromUsers addObject:fromUser];
    }
    NSLog(@"allFromUsers = %@", allFromUsers);

    // ... etc ...
}

parsedJsonまたは、配列から必要な個々のツイートを取得します。

于 2013-01-25T18:31:33.697 に答える
-1

そのはず:

NSMutableArray *userName = [NSMutableArray arrayWithObject:[jsonDictionary objectForKey:@"from_user"]];

または、NSStringに名前を入れたいだけですか?

NSString *userName = [jsonDictionary objectForKey:@"from_user"];
于 2013-01-25T18:29:12.733 に答える