Таким образом, у меня возникла проблема, когда я прочитал то, что я ожидаю, что это NSNumber из NSArray, содержащегося в списке свойств, и вместо того, чтобы получить число, например '1', я получаю то, что выглядит как адрес памяти (то есть «61879840»). Числа четко указаны в списке свойств. Кто-нибудь знает, почему это может происходить и что я могу сделать, чтобы это исправить?
Ниже приведен мой процесс создания списка свойств и чтения его обратно.
Создание списка свойств
Я создал простой список свойств Objective C с массивами целых чисел в одном корневом массиве:
<array>
<array>
<integer>1</integer>
<integer>2</integer>
</array>
<array>
<integer>1</integer>
<integer>2</integer>
<integer>5</integer>
</array>
... more arrays with integers ...
</array>
Массивы - это объекты NSArray, а целые числа - объекты NSNumber. Список свойств был создан и сериализован с использованием следующего кода:
// factorArray is an NSArray that contains NSArrays of NSNumbers as described above
// serialize and compress factorArray as a property list, Factors-bin.plist
NSString *error;
NSString *rootPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)
objectAtIndex:0];
NSString *plistPath = [rootPath stringByAppendingPathComponent:@"Factors-bin.plist"];
NSData *plistData = [NSPropertyListSerialization
dataFromPropertyList:factorArray
format:NSPropertyListBinaryFormat_v1_0
errorDescription:&error];
Проверяя созданный список, все значения и типы верны, что наводит меня на мысль, что я правильно создал список.
Чтение списка недвижимости
Список свойств читается как Данные, а затем преобразуется в NSArray:
NSString *path = [[NSBundle mainBundle] pathForResource:@"Factors" ofType:@"plist"];
NSData *plistData = [[NSData alloc] initWithContentsOfFile:path];
NSPropertyListFormat format;
NSString *error = nil;
NSArray *factorData = (NSArray *)[NSPropertyListSerialization
propertyListFromData:plistData
mutabilityOption:NSPropertyListImmutable
format:&format
errorDescription:&error];
Циклически просматривая factorData, чтобы увидеть, что в нем содержится, я вижу ошибочные целые числа:
for (int i = 0; i < 10; i++) {
NSArray *factorList = (NSArray *)[factorData objectAtIndex:i];
NSLog(@"Factors of %d\n", i + 1);
for (int j = 0; j < [factorList count]; j++) {
NSLog(@" %d\n", (NSNumber *)[factorList objectAtIndex:j]);
}
}
Я вижу все правильное количество значений, но сами значения неверны, т.е.:
Factors of 3
61879840 (should be 1)
61961200 (should be 3)
Factors of 4
61879840 (should be 1)
61943472 (should be 2)
61943632 (should be 4)
Factors of 5
61879840 (should be 1)
61943616 (should be 5)