Ios 从ViewController分配NSArray以通过客户端
我的ViewController中有一个名为Ios 从ViewController分配NSArray以通过客户端,ios,iphone,objective-c,twitter,nsarray,Ios,Iphone,Objective C,Twitter,Nsarray,我的ViewController中有一个名为tweets的NSArray。要检索tweet,我必须使用我的TwitterClient.m类中的方法。方法如下所示: -(NSArray*)getTimeline { NSArray *timelineArray; [self.twitterClient registerHTTPOperationClass:[AFJSONRequestOperation class]]; [self.twitterCl
tweets
的NSArray
。要检索tweet,我必须使用我的TwitterClient.m
类中的方法。方法如下所示:
-(NSArray*)getTimeline {
NSArray *timelineArray;
[self.twitterClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self.twitterClient getPath:@"1.1/statuses/user_timeline.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *responseArray = (NSArray *)responseObject;
[responseArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Success: %@", obj);
}];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
return responseArray;
}
但是,正如您所知,您无法返回responseArray
,因为它位于块内。有什么更有效的方法可以做到这一点。
我有另一种方法,但在这种方法中,我无法将响应数组指定为参数NSArray
:
-(void)getTimeline:(NSArray*)tweetArray {
[self.twitterClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self.twitterClient getPath:@"1.1/statuses/user_timeline.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSArray *responseArray = (NSArray *)responseObject;
[responseArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
NSLog(@"Success: %@", obj);
responseArray = tweetArray;
}];
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"Error: %@", error);
}];
}
基本上,最后一个问题是如何在我的视图控制器中分配
tweets
数组,使其与通过TwitterClient
类传入的响应数组相等。在获取所需信息后,您应该传递一个被调用的块:
- (void)getTimelineWithCompletionBlock:(void (^)(NSError *err, NSArray *arr)) block {
[self.twitterClient registerHTTPOperationClass:[AFJSONRequestOperation class]];
[self.twitterClient getPath:@"1.1/statuses/user_timeline.json" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {
(block ? block(nil, responseObject) : nil);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
(block ? block(error, nil) : nil);
}];
}
您可以通过以下方式调用该方法:
[self getTimelineWithCompletionBlock:^(NSError *err, NSArray *arr) {
}];
在完成块中,您有可用的数据,您可以更新UI或任何您想要做的事情。根据getPath的实现,您可能必须在主队列上调度完成块,因为您只允许在主线程上更新UI。不,您不能,因为
响应array
是在它上面的块中的块内声明的。你可以看到它是一个街区中的一个街区。。封锁!您不能这样做,因为responseArray=(NSArray*)responseObject
,而responseObject
是在上面的responseArray
块中声明的,所以我不完全理解您正在做或试图做什么,但这听起来像是你把自己带入了一个过于复杂的混乱之中,也许有一种更简单的方法来完成这一切。我不会再花时间去想它了。