1

我的问题是关于在完成处理程序块之外保持引用活动。首先,请看我的 TableViewController:

@interface KMTweetTableViewController : 
UITableViewController

@property (weak) ACAccount      
 *selectedAccount;

@property  NSMutableArray  *tweetTextBank ;

@end

在我的- (void)viewDidLoad方法中KMTweetTableViewController创建了一个SLRequest名为userTimeLineRequest. 事实证明,它负责为用户的时间线请求 twitter。

然后,我尝试从状态“文本”属性中创建一个数组。我使用这段代码来做到这一点:

[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. 我认为这是因为tweetTexts 的引用在块的末尾被终止dispath_async......那么在这种情况下我能做些什么来在启用 ARC 时保持该引用有效?

谢谢你们

4

2 回答 2

2

由于您尚未初始化数组,因此您将获得空值。所以首先你需要初始化可变数组。

self.tweetTextBank=[NSMutableArray array];
于 2013-11-10T11:31:34.667 回答
2

正确初始化可变数组,然后向其中添加对象

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 回答