好的,我有这个程序可以通过Web服务器(PHP脚本)进行通信
我有这种方法,我想得到一个表的随机ID。此NSURLconnection的返回数据将作为表中的行数。
我第一次调用它时,它就像randomid变量一样没有设置,但第二次运行它时,它确实被设置了。
变量设置:
@implementation ViewController {
NSMutableData *randomData;
int randomid;
}
这是我的IBaction按钮:
- (IBAction)initVits:(id)sender {
[self randomID];
NSLog(@"Random ID: %d", randomid);
}
输出第一次是:随机ID:0,第二次:随机ID:有效ID
RandomID:
- (void) randomID {
NSString *url = @"http://ivitserdk.porkhost.dk/ivitserdk.php?function=randomid";
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url] cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:1.0];
connectionRandomID = [[NSURLConnection alloc] initWithRequest:request delegate:self];
randomData = [NSMutableData data];
[connectionRandomID start];
}
连接完成加载:
if(connection == connectionRandomID) {
NSString *String = [[NSString alloc] initWithData:randomData encoding:NSUTF8StringEncoding];
NSLog(@"Return: %@", String);
int temp = [String integerValue];
NSLog(@"temp: %d", temp);
randomid = (arc4random() % temp) + 1;
NSLog(@"Random: %d", randomid);
randomData = nil;
connectionRandomID = nil;
}
输出始终为:返回:(表中的行数) temp :(表中的行数为int) 随机:(随机数)
就像randomid变量第一次没有设置一样。
谢谢你的时间!
答案 0 :(得分:2)
[self randomID] 因为你在randomID函数中进行异步调用,所以立即返回。
randomid在didFinish回调上设置,在你对NSar随机数据库进行NSLog后执行它。
答案 1 :(得分:1)
您正在使用异步网络,因此在从服务器检索随机ID之前调用NSLog
。有多种解决方案。
NSLog
方法结束时生成ID时,将connectionDidFinishLoading
语句或您想要执行的操作放入答案 2 :(得分:0)
你添加了吗?
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[randomData appendData:data];
}