2014-02-13 45 views
-1

我只是試圖輸出在NSArray中保存的值,因爲我想知道它有多大。不過,我對iOS開發和對象C一般都很陌生,所以我希望有人能幫助我。從NSArray輸出值

數組充滿了以下調用:

-(void)beaconManager:(ESTBeaconManager *)manager 
    didRangeBeacons:(NSArray *)beacons 
      inRegion:(ESTBeaconRegion *)region 
{ 
    if([beacons count] > 0) 
    { 

    } 
} 

我一直在呼籲在側以下行嵌套的if語句玩耍,但是每次都被調用時,系統崩潰:

 NSLog([beacons count]); 

有人可以告訴我如何顯示這個數組中的值,以及我如何能夠訪問它們?

+0

這種情況下的用法是NSLog(@「Array contents:%@,Object Count:%d」,beacons,[beacon count])''。 'NSLog'接受一個字符串參數,你傳遞整數,因此崩潰。一般來說,如果有疑問,請使用[documentation](https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/doc/uid/20000055-BCIJAAIA)作爲你的朋友。 – Amar

回答

1

你的NSLog說法是錯誤的,應該是:

NSLog(@"%d", [beacons count]); 
1
NSLog(@"value stored in array are %d", [beacons count]); 
0

嘗試這樣的事情

for (CLBeacon b in beacons) 
{ 
NSLog(@"uuid: %@", b.proximyUUID); 
} 
0

而其他的答案是技術上是正確的,他們沒有做太多解釋爲什麼他們是正確的,提問者做錯了什麼。

看一看函數聲明:NSLog(NSString *format, ...)

NSLog()採用兩個參數,一個格式字符串和一個可變參數列表(...),其格式字符串內使用。

格式字符串是使用格式說明符(佔位符)將值替換爲字符串的文字字符串。例如:@"Hello my name is %@"。這裏,%@用作對象的格式說明符,並且會伴隨一個名稱變量被傳入變量參數列表中。

完整的函數調用看起來像NSLog(@"Hello my name is %@", myName);

的格式說明和變量參數列表進行處理,以從左至右。

還有其它數據類型的格式化標識符(還有更多,因此檢查文檔):

  • %d - 整數
  • %f - 浮
  • %@ - 對象

之前的代碼崩潰的原因是因爲您傳遞的是NSUInteger(返回值從-count)作爲預期字符串的函數的參數。字符串變量是ObjC中的指針,所以發生崩潰的原因是代碼嘗試訪問整數作爲指針(您可以在文檔中閱讀更多內容)。

有關iOS和Objective-C的良好入門指南可以在https://developer.apple.com/programs/ios/gettingstarted/找到,並且一如既往,閱讀Xcode中可訪問的文檔!

0
NSMutableString * retStr = [NSMutableString string]; 
NSInteger n = [beacons count]; 
while (n>=1000) { 
    [retStr appendString:@"M"]; 
    n-=1000; 
} 
if (n>=900) { 
    [retStr appendString:@"CM"]; 
    n-=900; 
} 
if (n>=500) { 
    [retStr appendString:@"D"]; 
    n-=500; 
} 
if (n>=400) { 
    [retStr appendString:@"CD"]; 
    n-=400; 
} 
while (n>=100) { 
    [retStr appendString:@"C"]; 
    n-=100; 
} 
if (n>=90) { 
    [retStr appendString:@"XC"]; 
    n-=90; 
} 
if (n>=50) { 
    [retStr appendString:@"L"]; 
    n-=50; 
} 
if (n>=40) { 
    [retStr appendString:@"XL"]; 
    n-=40; 
} 
while (n>=10) { 
    [retStr appendString:@"X"]; 
    n-=10; 
} 
if (n>=9) { 
    [retStr appendString:@"IX"]; 
    n-=9; 
} 
if (n>=5) { 
    [retStr appendString:@"V"]; 
    n-=5; 
} 
if (n>=4) { 
    [retStr appendString:@"IV"]; 
    n-=4; 
} 
while (n) { 
    [retStr appendString:@"I"]; 
    n--; 
} 
NSLog(@"%@",retStr); 
+0

似乎有很多方法可以做到這一點,但是,這顯然是最有效的方法。 –