我不知道但是自从使用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代码在此方法中不起作用。那么我该怎么办才能只调用一次呢?
答案 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',或者甚至在按下按钮或其他任何内容之后。