Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/120.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 从ViewController分配NSArray以通过客户端_Ios_Iphone_Objective C_Twitter_Nsarray - Fatal编程技术网

Ios 从ViewController分配NSArray以通过客户端

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

我的ViewController中有一个名为
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
块中声明的,所以我不完全理解您正在做或试图做什么,但这听起来像是你把自己带入了一个过于复杂的混乱之中,也许有一种更简单的方法来完成这一切。我不会再花时间去想它了。