2012-12-02 48 views
0

好了,所以我有這個計劃,是suposed超過一個Web服務器(PHP腳本)目標C整數爲0第一次,但它改變了第二次

溝通我有這樣的方法,我想獲得一個隨機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; 
} 

輸出是所有時代:返回: 溫度(在表中的行數): (錶行的整型數字)隨機:(隨機數)

它像randomid變量不會在第一次設置。

謝謝你的時間!

+0

你可以想出一個更高效的隨機數生成器算法... – 2012-12-02 20:13:23

+1

你也可以更方便地給你的方法提供一些信息。例如。而不是「randomID'」(這也是該類內的ivar的名稱...... eek!),那麼「createRandomIDUsingConvolutedServerInteraction'」怎麼樣? –

+1

@MichaelDautermann不夠長。 – 2012-12-02 20:16:28

回答

1

您正在使用異步網絡,因此在從服務器檢索隨機ID之前調用您的NSLog。有多種解決方案。

  • 使用同步網絡(我不建議這一點,所以我不會進一步進入那個)
  • NSLog陳述或任何你想要的時候,在結束時生成的ID做你的connectionDidFinishLoading方法
  • 如果可能的話,我建議你在設備上生成的ID(但我猜你需要一個數據庫,一個URL或東西的唯一關鍵,所以這可能不會爲你工作)
+0

我有多個連接,所以我想如果其他(連接== connectionRandom),我會怎麼做呢? –

+0

把你想做的事情放入屬於正確連接的'if'塊。 –

+0

請檢查我的代碼,我沒有做過嗎?你也可以舉個例子。 –

0

您添加了這個嗎?

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data 
{ 
// Append the new data to receivedData. 
// receivedData is an instance variable declared elsewhere. 
[randomData appendData:data]; 
} 
+0

是的,我確實補充說,正如我說的那樣dinten't第一次工作,我按下按鈕,但它做了第二次:) –

2

[自randomID] 立刻回報,因爲你正在做randomID函數中的異步調用。

randomid在didFinish回調上設置,它在NSLog伊娃爾randomid後執行。

+0

我將如何解決它呢? –

相關問題