initWithNibName中的NSURLConnection?

时间:2012-03-12 09:53:32

标签: iphone nsurlconnection viewdidload

我不知道但是自从使用iOS5(现在是5.1)和Xcode 4(现在是4.3)以后,无论如何都会每次都调用ViewDidLoad。我必须从API检索JSON输出,但如果我将提取代码放在ViewDidLoad中,则每次都会调用它。所以我的问题是,在initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil中使用NSURLConnection代码是否OK / Legal(从Appstore的角度来看)?

继承代码

- (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 个答案:

答案 0 :(得分:1)

如您所述,将代码放入init方法是完全“合法的”。实际上,正如您所指出的那样,viewDidLoad可能被多次调用(例如在低内存警告之后)。

至于为什么你的代码不起作用,我认为没有足够的背景来确定。 if块中的代码是否实际执行?我的猜测是否定的。如果您使用的是iOS5和Storyboard,则不使用initWithNibName方法。如果您在initWithCoding:方法中使用相同的代码,则可能会获得更多成功。

答案 1 :(得分:0)

将代码放入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',或者甚至在按下按钮或其他任何内容之后。