0

わかりましたので、Webサーバー(PHPスクリプト)を介して通信することになっているこのプログラムがあります

テーブルのランダムIDを取得したいこのメソッドがあります。この NSURLconnection の戻りデータは、テーブル内の行数であると想定されます。

初めて呼び出すと、ランダムID変数が設定されませんが、2回目に実行すると設定されます。

可変設定:

@implementation ViewController {
NSMutableData *randomData;
int randomid;
}

ボタンの IBaction は次のとおりです。

- (IBAction)initVits:(id)sender {
[self randomID];
NSLog(@"Random ID: %d", randomid);    
}

最初の出力は次のとおりです: ランダム ID: 0、2 回目: ランダム ID: 有効な ID

ランダム ID:

- (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;
 }

出力は常に次のとおりです。 Return: (テーブル内の行数) temp: (テーブル内の行数から int) Random: (乱数)

randomid 変数が初めて設定されないようです。

御時間ありがとうございます!

4

3 に答える 3

2

[self randomID]は、randomID関数内で非同期呼び出しを行っているため、すぐに戻ります。

randomidは、ivarrandomidをNSLogした後に実行されるdidFinishコールバックに設定されます。

于 2012-12-02T20:18:14.500 に答える
0

これを追加しましたか?

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
// Append the new data to receivedData.
// receivedData is an instance variable declared elsewhere.
[randomData appendData:data];
}
于 2012-12-02T20:18:05.393 に答える