3

次のコードを含むツイートを Twitter で検索しています。

- (void)fetchTweets
{

NSURL *url = [NSURL URLWithString:@"http://search.twitter.com/search.json"];
NSDictionary *params = [NSDictionary dictionaryWithObject:@"#winning" forKey:@"q"];

TWRequest *request = [[TWRequest alloc] initWithURL:url 
                                         parameters:params 
                                      requestMethod:TWRequestMethodGET];

[request performRequestWithHandler:
 ^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {

     if (responseData) {
         NSError *jsonError;
         tweets = 
         [NSJSONSerialization JSONObjectWithData:responseData 
                                         options:kNilOptions
                                           error:&jsonError];


         if (tweets) {
            // NSLog(@"%@", tweets);
         } 

         else { 
             NSLog(@"%@", jsonError);
         }

     }

     [[self delegate] receivedTweets];

 }];

[self performSelector:@selector(fetchTweets) withObject:nil afterDelay:30];

tweets 変数は NSArray であり、次のコードで NSDictionary に入れようとしています:

NSDictionary *tweet = [[TwitterHandler sharedInstance].tweets objectAtIndex:indexPath.row];

ツイートのJSONテキストを確実に取得していますが、それらをディクショナリに追加しようとすると、最終的にそれらをテーブルに配置できるようになり、「認識されないセレクターがインスタンスに送信されました」というエラーが発生します。

なぜこれを取得しているのかわかりません。助けていただければ幸いです。

4

3 に答える 3

2

このコードでは:

 if (responseData) {
         NSError *jsonError;
         tweets = 
         [NSJSONSerialization JSONObjectWithData:responseData 
                                         options:kNilOptions
                                           error:&jsonError];


         if (tweets) {
            // NSLog(@"%@", tweets);
         } 

         else { 
             NSLog(@"%@", jsonError);
         }

tweetsこのコードで取得しているものと同じです:

[[TwitterHandler sharedInstance].tweets

もしそうなら、au autoreleased オブジェクトに割り当てているように見えるので、最終的に解放され、解放されたオブジェクトへのポインターになります。

それを保持するか、割り当てるときに保持プロパティを使用することをお勧めします。

何かのようなもの

tweets = 
         [[NSJSONSerialization JSONObjectWithData:responseData 
                                         options:kNilOptions
                                           error:&jsonError] retain];

tweetsまたは、それが保持またはプロパティであると仮定します。

self.tweets = 
         [NSJSONSerialization JSONObjectWithData:responseData 
                                         options:kNilOptions
                                           error:&jsonError];

不要になったら解放することを忘れないでください(少なくともdeallocあなたのクラスでは)

編集

わかりました、これが問題です。メモリ管理とは関係ありません (最初の推測が間違っています!): URL を試したところ、次のように返されます:

{"error":"You must enter a query."}

これは JSON 辞書です。次に、JSON パーサーがこれを辞書として識別し、辞書を返します。NSArray* に格納することはできますが、インスタンス化されたオブジェクトは依然として辞書であり、NSDictionary メソッドにのみ応答します。印刷するとコメントが示すように、辞書が印刷されます。

于 2012-05-25T19:11:59.480 に答える
1
[NSJSONSerialization JSONObjectWithData:responseData 
                                options:kNilOptions
                                  error:&jsonError];

これにより、ツイートのNSDictionaryオブジェクトが返されます。そのURLからのTwitter検索結果は、キーのコンテンツを検索することで除外できますresults

AKA:

NSDictionary *jsonTweet = [NSJSONSerialization JSONObjectWithData:responseData 
                                                          options:kNilOptions
                                                          error:&jsonError];

NSArray *tweet = [jsonTweet objectForKey:@"results"];

次に、ツイートはNSArrayにあるため、繰り返し処理できます。

于 2012-06-13T16:18:32.863 に答える
1

私はこれを一度持っていました.View Controllerをリリースするアプリでした.View Controllerがリリースされているかどうかを確認してください.

于 2012-05-25T19:06:23.367 に答える