Я не знаю, почему это так сложно, но я не могу заставить это работать. Вот мой основной поток:Передача значения из класса NSObject обратно в UIViewController
У меня есть UIViewController с subview UIView, который сам имеет subview UIButton. Нажатие кнопки создает экземпляр NSObject, называемый TwitterController, создает NSURL для фида Twitter и затем передает управление 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, я получаю щебет корма и обработать его здесь:
- (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, но я не могу понять, как это сделать.
Я сделал следующее:
Пробовал возвращение TweetArray из getTwitterFeed, но он вернулся в нуль (мое предположение, метод возвращал массив, прежде чем соединение кончила)
Пробовал ставить его в UserDefaults, но я продолжаю получать нуль (то же самое, что и выше, но потом я ввел его в connectionDidFinish и все еще null)
Пробовал передать ссылку на ViewController на TwitterController, а затем вызвать метод в VC, чтобы передать массив, но в TwitterController Я ошибаюсь, потому что говорит, что мой экземпляр VC не распознает ze селектор. (Там, я проверял тройку).
Я уверен, что это просто, и я просто плотный, но может ли кто-нибудь помочь мне с этим?
Edit: Вот как я пытался передать его обратно в 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;
и в ВК.м
- (void) getTwitterFeed : (NSArray*) theTwitterFeed {
NSLog(@"%@", theTwitterFeed);
}
Вы можете разместить код, в котором вы пытались поставить tweetArray в контроллере представления? и его определение? – giorashc
Да, держись в течение нескольких секунд, и я получу его ... – PruitIgoe