我的问题是关于在完成处理程序块之外保持引用活动。 首先,请查看我的TableViewController:
@interface KMTweetTableViewController :
UITableViewController
@property (weak) ACAccount
*selectedAccount;
@property NSMutableArray *tweetTextBank ;
@end
在- (void)viewDidLoad
KMTweetTableViewController
方法中,我创建了一个名为SLRequest
的{{1}}实例。事实证明,它负责为用户的时间线请求推特。
然后,我尝试从状态“text”属性创建一个数组。我使用这段代码来做到这一点:
userTimeLineRequest
[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
块的结尾处终止...那么在这种情况下我可以做什么来在启用ARC时保持该引用处于活动状态?
谢谢大家
答案 0 :(得分:2)
由于您尚未初始化数组,因此您将获得null。首先,您需要初始化可变数组。
self.tweetTextBank=[NSMutableArray array];
答案 1 :(得分: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) ;
});
}];