1

私の質問は、完了ハンドラー ブロックの外で参照を維持することです。まず、私の TableViewController を見てください:

@interface KMTweetTableViewController : 
UITableViewController

@property (weak) ACAccount      
 *selectedAccount;

@property  NSMutableArray  *tweetTextBank ;

@end

- (void)viewDidLoad方法で、という名前のインスタンスKMTweetTableViewControllerを作成しました。結局のところ、それはユーザーのタイムラインのために twitter を要求する責任があります。SLRequestuserTimeLineRequest

次に、ステータスの「テキスト」プロパティから配列を作成しようとしました。私はそれを行うためにこのコードを使用しました:

[userTimeLineRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSArray *userTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:Nil];
            int counter ; NSMutableArray *returner = [NSMutableArray alloc]  ;
            for (counter= 1 ; counter <= userTimelineCountReference ; counter++) {
                NSDictionary  *status = [userTimeline objectAtIndex: counter-1]   ;
                NSString  *tweetText = [status objectForKey:@"text"];
                [self.tweetTextBank addObject:tweetText ];
            }
            NSLog(@"%@" , self.tweetTextBank) ;
        });

    }];

ブロック内のコードはdispath_asyncうまく機能しますが、NSLog()起動するとnull. tweetTextこれは、 s の参照がブロックの最後で終了するためだと思いますdispath_async...この場合、ARCが有効になっているときにその参照を維持するにはどうすればよいですか?

皆さん、ありがとうございました

4

2 に答える 2

2

mutablearray を適切に初期化し、それにオブジェクトを追加します

self.tweetTextBank=[[NSMutableArray alloc]initWithCapacity:3];
[userTimeLineRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            NSArray *userTimeline = [NSJSONSerialization JSONObjectWithData:responseData options:0 error:Nil];
            int counter ; 
            for (counter= 1 ; counter <= userTimelineCountReference ; counter++) {
                NSDictionary  *status = [userTimeline objectAtIndex: counter-1];
                NSString  *tweetText = [status objectForKey:@"text"];
                [self.tweetTextBank addObject:tweetText ];
            }
            NSLog(@"%@" , self.tweetTextBank) ;
        });

    }];
于 2013-11-10T11:36:38.913 に答える