NSURLConnection в initWithNibName? - PullRequest
0 голосов
/ 12 марта 2012

Я не знаю, но, поскольку с помощью iOS5 (сейчас 5.1) и Xcode 4 (сейчас 4.3), ViewDidLoad вызывается каждый раз, несмотря ни на что.Мне нужно получить вывод JSON из API, но если я помещаю код извлечения в ViewDidLoad, он вызывается каждый раз.Итак, мой вопрос, нормально ли / законно (с точки зрения Appstore) использовать код NSURLConnection в initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil?

Вот код

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
    if (self) {
        // Custom initialization
        jsonContent=[[NSMutableData alloc]init];
        stateConnection= [[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"MY API"]] delegate:self startImmediately:YES];
    }
    return self;
}

Редактировать: не работает.код NSURLConnection не работает в этом методе.так что мне делать, чтобы он вызывался только один раз?

Ответы [ 2 ]

1 голос
/ 12 марта 2012

Вполне "законно" помещать код в метод init, как вы описываете.Действительно, как вы заметили, viewDidLoad можно вызывать несколько раз (например, после предупреждения о нехватке памяти).

Что касается того, почему ваш код не работает, я не думаю, что достаточноконтекст, чтобы быть уверенным.Код в блоке if действительно выполняется?Мое предположение нет.Если вы используете iOS5 и раскадровки, метод initWithNibName не используется.Если вы поместите тот же код в метод initWithCoding:, вы можете добиться большего успеха.

0 голосов
/ 12 марта 2012

Прекрасно поместить этот код в viewDidLoad.Просто проверьте, если вы уже инициализировали его.

if(jsonContent == nil) {
    jsonContent=[[NSMutableData alloc]init];
    stateConnection= [[NSURLConnection alloc]initWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"MY API"]] delegate:self startImmediately:YES];
    }
}

С помощью этой проверки вы можете даже запустить его позже (если он лучше соответствует вашим потребностям, как в viewWillAppear' or viewDidAppear ', или даже после нажатия кнопки иливсе остальное.

...