2015-01-08 42 views
0

當我嘗試通過iOS模擬器(8.1和7.1)運行以下代碼時,myMethod中「going」的值爲YES。iOS模擬器和iOS8設備之間的NSNumber與BOOL的不同結果

但是,當我使用我的iPhone(8.1.2)運行時,「去」的值將成爲否。

[self performSelector:@selector(myMethod:) withObject:[NSNumber numberWithBool:YES] afterDelay:0.5f]; 

- (void) myMethod:(BOOL)going { 

    if (going) { 
    // do something 
    } 
    else { 
    // do another thing 
    } 
} 

我無法找到獲得不同結果的根本原因。

任何人都可以幫忙嗎?謝謝

+0

[如何在Cocoa中使用performSelector:withObject:afterDelay:with primitive types?](http://stackoverflow.com/q/904515) –

回答

2

myMethod:需要BOOL。不是NSNumber。您需要:

[self performSelector:@selector(myMethod:) withObject:@YES afterDelay:0.5f]; 

- (void)myMethod:(NSNumber *)going { 
    if ([going boolValue]) { 
     // do something 
    } else { 
     // do another thing 
    } 
} 

另一種選擇是使用dispatch_after而不是performSelector:withObject:afterDelay:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{ 
    [self myMethod:YES]; 
}); 

- (void)myMethod:(BOOL)going { 
    if (going) { 
     // do something 
    } else { 
     // do another thing 
    } 
} 
相關問題