gpt4 book ai didi

ios - 为什么从 pList 加载 NSArray 会将我的数组变成 NSDictionary?

转载 作者:行者123 更新时间:2023-12-01 16:58:30 28 4
gpt4 key购买 nike

这是我的问题:我将 plist 加载到 NSArray 中。我没有在我的应用程序的任何地方声明任何 NSDictionary。

现在我有一个 UIPickerView。我希望它从作为我的 View Controller 的私有(private)成员的 NSArray 中填充。我的选择器需要实现“titleForRow”方法。如果我这样实现它,它会崩溃:

- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
return [airportList objectAtIndex:row];
}

但是,如果我这样实现它,它会起作用:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
NSDictionary *stupid = (NSDictionary *)airportList;
NSString *airPortName = [stupid objectForKey:[NSString stringWithFormat:@"Item%d",row]];
NSLog(@"%@",airPortName);
return airPortName;
}

为什么我的 NSArray 会自动转换为 NSDictionary?

编辑 *:
这是我从 plist 生成 NSArray 的方法:
-(NSArray *)createAirportList
{
NSString *path = [[NSBundle mainBundle] pathForResource:@"AirportList" ofType:@"plist"];
NSData *plistAirportNames = [NSData dataWithContentsOfFile:path];
NSString *error;
NSPropertyListFormat format;
NSArray *airportNames = [NSPropertyListSerialization propertyListFromData:plistAirportNames mutabilityOption:NSPropertyListImmutable format:&format errorDescription:&error];
if(!airportNames)
{
NSLog(@"Could not read the airport name. Error:%@",error);
}
return airportNames;
}

我的 plist 只是关键:Item0 字符串“blah”。所以是的,它有点像字典,但为什么我不能使用我创建的 NSArray 对象?自动类型转换是怎么回事?

最佳答案

该行:

NSArray *airportNames = [NSPropertyListSerialization 
propertyListFromData:plistAirportNames
mutabilityOption:NSPropertyListImmutable
format:&format errorDescription:&error];

不会“将 plist 加载到数组中”,它会加载 plist 中的任何对象并将对该对象的引用分配给 NSArray * 类型的指针.

在 Objective-C 中,对象是无类型的。程序员使用类型指针来提高可读性,以便编译器可以提供适当的警告。

尽管如此, id type 是可用的,它代表一个无类型的对象。任何类型都可以分配给 idid对象可以分配给任何其他类型。在这些情况下,编译器无法静态检查您在做什么,因此您需要使用自己的判断。

在这种情况下,您的 plist 显然包含字典。所以 NSPropertyListSerialization加载并返回字典,类型为 id因为它可能返回任何属性类型。只需将其存储为 NSArray *不影响其在内存中的类型。

可能你想拿字典打电话 allKeysallValues以一种或另一种方式获取表示字典中元素的数组。

关于ios - 为什么从 pList 加载 NSArray 会将我的数组变成 NSDictionary?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9491346/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com