В то время как другие ответы технически правильно, они ничего не делают, чтобы объяснить Почему они правильные и что спрашивал, делал неправильно.
Посмотрите на объявлении функции: 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!
Использование в этом случае: '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