2015-05-08 5 views
-1

Итак, я нахожусь в ОС, приложение Xcode, в коде Objective-C. Вот то, что я до сих пор:Objective-C Как использовать токены для NSArrays?

#import <Foundation/Foundation.h> 

int main(int argc, const char * argv[]) 
{ 
    @autoreleasepool { 

     /// IN THIS CHALLENGE, I HAVE TO MAKE MY OWN PLIST 
     /// IT HAS TO INCLUDE ALL 8 TYPES: ARRAY, DICTIONARY, STRING, DATA, DATE, INTEGER, FLOAT, AND BOOLEAN... 

     // Add the elements 
     NSMutableArray *array; 
     NSMutableDictionary *dictionary; 
     NSString *string; 
     NSData *data; 
     NSDate *date; 
     int integer; 
     float floating; 
     BOOL boolean; 


     // Set up the elements 
     [array addObject:[NSString stringWithFormat:@"\"Array\""]]; 
     [dictionary setObject:@"\"Dictionary\"" 
         forKey:@"dic"]; 
     string = [NSString stringWithFormat:@"\"String\""]; 
     data = [NSData dataWithContentsOfFile:@"/tmp/cool.text"]; 
     date = [NSDate date]; 
     integer = 50; 
     floating = 50.5; 
     boolean = YES; 


     // Log them out 
     NSLog(@"Array: %@\n\n", array); 
     NSLog(@"Dictionary: %@\n\n", dictionary); 
     NSLog(@"String: %@\n\n", string); 
     NSLog(@"Data: %@\n\n", data); 
     NSLog(@"Date: %@\n\n", date); 
     NSLog(@"Integer: %d\n\n", integer); 
     NSLog(@"Float: %f\n\n", floating); 
     NSLog(@"Boolean: %hhd\n\n", boolean); 

    } 
    return 0; 
} 

Итак, что это «вызов» (из книги кодирования я ниже) должен сделать, это распечатать значения каждого из них в консоли. Но у меня проблема. При запуске приложения, журнал печатает это:

2015-05-08 14: 48: 23.588 ЗАДАЧА 7. Plist [21817: 1995500] Массив: (нуль)

2015-05 -08 14: 48: 23,590 ЗАДАЧА 7. Plist [21817: 1995500] Словарь: (нуль)

2015-05-08 14: 48: 23,590 ЗАДАЧА 7. Plist [21817: 1995500] Строка: «Строка "

2015-05-08 14: 48: 23.590 CHALLENGE 7. Plist [21817: 1995500] Данные: < 43687269 73746961 6e206973 20636f6f 6c210a43 68726973 7469616e 20697320 636f6f6c 210a4368 ​​72697374 69616e20 69732063 6f6f6c21 0a436872 69737469 616e2069 7320636f 6f6c210a 43687269 73746961 6e206973 20636f6f 6c210a43 68726973 7469616e 20697320 636f6f6c 210a4368 ​​72697374 69616e20 69732063 6f6f6c21 0a436872 69737469 616e2069 7320636f 6f6c210a 43687269 73746961 6e206973 20636f6f 6c210a43 68726973 20697320 7469616e 636f6f6c 21>

2015-05-08 14: 48: 23,596 ЗАДАЧА 7. Plist [21817: 1995500] Дата: 2015-05-08 19:48:23 +0000

2015-05-08 14: 48: 23,596 ЗАДАЧА 7. Plist [21817: 1995500] Целое число: 50

2015-05-08 14: 48: 23,596 ЗАДАЧА 7. Plist [21817: 1995500] Поплавок: 50,500000

2015-05-08 14: 48: 23,597 ЗАДАЧА 7. Plist [21817: 1995500] Логическое: 1

Таким образом, это нормально, но я хотел бы некоторую помощь о том, как использовать NSLog() для правильной печати значений. Как вы можете видеть, как массив, так и словарь распечатываются как (null), или, вернее, без значения. И данные из файла, содержащего слова «Random Text», не распечатывают значение String. Кажется, он распечатывает не-человекочитаемое значение самого файла. Это потому, что я использовал токен% @ с этими? Если да, то что должно Я использую?

+3

Они печатаются как '(null)', потому что они 'nil'. Вы никогда не инициализируете их. – rmaddy

+0

'(null)' в выходе NSLog означает, что указатель 'nil'. Помните, что Objective-C будет с удовольствием работать без операций с nil-указателями. –

+0

Вам не нужен все escape-код '\' 'Пример:' [array addObject: @ "Array"]; 'и' [dictionary setObject: @ "Словарь" forKey: @ "dic"]; 'или использование Литеральный синтаксис: 'dictionary [@" dic "] = @" Словарь ";'. – zaph

ответ

1

Вы должны инициализировать arrays, прежде чем добавлять что-либо к нему.

NSMutableArray *array = [[NSMutableArray alloc] init]; 
+0

Более правильно, вы должны * создать * объект * *, прежде чем сможете работать с ним. Нет необходимости «инициализировать» указатель, назначая ему результат «alloc/init», если впоследствии вы назначаете адрес другого объекта этому указателю. –

+0

Умм, Джессика, я немного смущен. Когда я ** addObject: ** Я думал, что это инициализировало его и, действительно, заполнило его контентом. То же самое с моим словарем ** setObject: forKey: **. –

+0

@ChristianKRider - 'addObject' - это метод, который работает с существующим NSArray, чтобы добавить к нему объект. Если массив не существует (указатель 'nil'), то это не-op. –

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