2014-02-13 6 views
-1

Я просто пытаюсь вывести значения, хранящиеся в NSArray, как я хочу видеть, насколько велика эта вещь. Тем не менее, я очень новичок в разработке iOS и объекте C в целом, поэтому я надеялся, что кто-то сможет мне помочь.Вывод значений из NSArray

Массив заполняется следующим вызовом:

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

    } 
} 

Я играл вокруг с заходом следующую строку в сторону вложенных если заявление, но каждый раз, когда она называется, системные сбои:

 NSLog([beacons count]); 

Может ли кто-нибудь показать мне, как отображать значения внутри этого массива и как я могу получить доступ к ним?

+0

Использование в этом случае: 'NSLog (@" Содержимое массива:% @, Число объектов:% d ", маяки, [количество маяков])'. 'NSLog' принимает строковый параметр, вы передаете целое число, следовательно, сбой. В общем, если есть сомнения, используйте [документацию] (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]); 
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

похоже на множество способов сделать это, но это, безусловно, самый эффективный способ. –

Смежные вопросы