NSPropertyListSerialization propertyListWithData создает несовместимое предупреждение / ошибку преобразования - PullRequest
4 голосов
/ 26 мая 2011

Я пытаюсь прочитать данные из списка, используя этот код:

NSString *error;    
NSData * tempData = [[NSData alloc] initWithContentsOfFile:@"Data.plist"];
NSDictionary *temp = [NSPropertyListSerialization propertyListWithData:tempData options:NSPropertyListImmutable format:NSPropertyListXMLFormat_v1_0 error:&error];

выдает предупреждение / сообщение об ошибке:

"Несовместимое преобразование целочисленного значения в указатель, отправляющее int в параметр типа« NSPropertyListFormat »(он же« unsigned int * »).

Понятия не имею, что происходит. Я выбрал NSPropertyListXMLFormat_v1_0 из вариантов подсказок кода.

Кроме того, пока я не могу найти обоснование для этого в документации: почему вы должны объявить переменную-указатель для «error», а затем использовать «& error» в качестве аргумента для error :. Для чего нужен амперсанд?

1 Ответ

28 голосов
/ 26 мая 2011

Когда вы пытаетесь прочитать данные, используя NSPropertyListSerialization, вы не указываете формат: вы либо передаете NULL, либо передаете адрес памяти переменной.

NSError *error;    
NSData * tempData = [[NSData alloc] initWithContentsOfFile:@"Data.plist"];
NSPropertyListFormat plistFormat;
NSDictionary *temp = [NSPropertyListSerialization propertyListWithData:tempData options:NSPropertyListImmutable format:&plistFormat error:&error];

Амперсанд означает «адрес в памяти, где хранится эта переменная» - используя его, вы даете методу возможность записывать в эту ячейку памяти и заменять исходное содержимое переменной.И plistFormat, и (потенциально) error будут содержать что-то новое после вызова этого метода: plistFormat сообщит you , в каком формате был plist, а не наоборот, и error (который должен относиться к классу NSError) расскажет вам обо всех обнаруженных ошибках.

...