我不知道为什么这如此困难,但我无法让它发挥作用。这是我的基本流程:
我有一个带有子视图 UIView 的 UIViewController,它本身有一个子视图 UIButton。单击该按钮会实例化一个名为 TwitterController 的 NSObject 的新实例,为 twitter 提要创建一个 NSURL,然后将控制权交给 TC 以执行 URLConnection 并序列化返回的数据。
这是 ViewController 中的相关代码(Pruit_Igoe 是我,尽管我没有发布太多内容,但请随意关注:D):
- (void) getTwitter {
//load new manager
twitterManager = [TwitterController new];
[twitterManager showTwitterFeed:vTwitterFeed:self];
NSURL* twitterFeedPath = [NSURL URLWithString: @"http://api.twitter.com/1/statuses/user_timeline.json?screen_name=Pruit_Igoe"];
[twitterManager getTwitterFeed:twitterFeedPath];
//toggle the twitter view
[self toggleView:vTwitterFeed];
[self toggleView:vContactCard];
}
- showTwitterFeed 转储视图 vTwitterFeed 中的对象(用于关闭视图、图像等的按钮)
- getTwitterFeed 开始 NSURLConnection 进程
在 TwitterController 中,我获取 twitter 提要并在此处处理它:
- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection {
//do something with the data!
NSError *e = nil;
//parse the json data
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData: receivedData options: NSJSONReadingMutableContainers error: &e];
//dump it into an array
tweetArray = [[NSMutableArray alloc] init];
for(NSDictionary* thisTweetDict in jsonArray) {
NSString* tweet = [thisTweetDict objectForKey:@"text"];
[tweetArray addObject:tweet];
}
}
这一切都很好,记录 tweetArray 和所有文本都在那里,记录 thisTweetDict 和 Twitter 发回的所有大量数据都在那里。问题是我想将 tweetArray 传递回 ViewController 但我似乎不知道如何去做。
我做了以下事情:
尝试从 getTwitterFeed 返回 TweetArray 但它返回为空(我的猜测是该方法在连接完成之前返回了数组)
试图把它放在 UserDefaults 但我一直为空(与上面的猜测相同,但后来我把它放在 connectionDidFinish 中并且仍然为空)
试图将 ViewController 的引用传递给 TwitterController,然后在 VC 中调用一个方法将数组传递给但在 TwitterController 中我出错了,因为它说我的 VC 实例无法识别选择器。(它在那里,我已经检查了三次)。
我确信这很简单,我只是很密集,但有人可以帮我解决这个问题吗?
编辑:这是我尝试将其传递回 VC 的方式:
我会使用这种方法将 VC 传递给 TC(这是在 VC 中)
[twitterManager showTwitterFeed:vTwitterFeed:self];
在 VC.h 我有一个 UIViewController* thisViewController
在 VC.m 中的 showTwitterFeed 中:
- (void) showTwitterFeed : (UIView* ) theTwitterView : (UIViewController* ) theViewController {
thisViewController = theViewController;
//...other code to build view objects
然后在
- (void)connectionDidFinishLoading:(NSURLConnection *)theConnection {
...
for(NSDictionary* thisTweetDict in jsonArray) {
NSString* tweet = [thisTweetDict objectForKey:@"text"];
[tweetArray addObject:tweet];
}
[thisViewController getTwitterFeed:tweetArray]; //<--this would error out saying selector not available
回到 VC.h
- (void) getTwitterFeed : (NSArray* ) theTwitterFeed;
在 VC.m 中
- (void) getTwitterFeed : (NSArray* ) theTwitterFeed {
NSLog(@"%@", theTwitterFeed);
}