我将一些数据(一些浮点数,一些字符串)存储到plist然后再读回来。当我读回它们时,我将它们分配给我的视图控制器中的一些ivars。他们只是伊娃,而不是财产。
花车的价值很好,我可以NSLog
他们看到它们是正确的。但无论我尝试什么,我都无法获取我的NSString ivars来获取字符串值。
示例:数组位置6和7中存储了字符串Portland, OR"
和"Pacific Daylight Time"
- 从plist读回*array.
此:
cityName = [NSString stringWithFormat:@"", [array objectAtIndex:6]];
timeZoneName = [NSString stringWithFormat:@"", [array objectAtIndex:7]];
NSLog(@" >cityName from array = %@, and now the iVar is = %@", [array objectAtIndex:6], cityName);
NSLog(@" >timeZoneName from array = %@, and now the iVar is = %@", [array objectAtIndex:7], timeZoneName);
结果如下:
>cityName from array = Portland, OR, and now the iVar is =
>timeZoneName from array = Pacific Daylight Time, and now the iVar is =
我在发生这种情况的方法结束时设置了一个断点,对于NSString
个{iv},我会发出一个小断点,Invalid Summary.
答案 0 :(得分:4)
cityName = [NSString stringWithFormat:@"%@", [array objectAtIndex:6]];
错误在于您错过了格式说明符。但具体来说,如果数组中的对象已经是字符串,您可以直接将它们分配给ivar:
cityName = [array objectAtIndex:6];
虽然注意对象所有权。您不拥有objectAtIndex:
返回的对象,因此如果您需要在许多不同方法中使用此ivar,请通过发送retain
获取所有权,并使用release
放弃所有权。或者,如果您选择将cityName
设置为班级的保留或复制属性,请使用点符号或访问器方法:
self.cityName = [array objectAtIndex:6];
// or
[self setCityName:[array objectAtIndex:6]];
答案 1 :(得分:2)
如果数组包含NSString
个实例,则无需调用+stringWithFormat:
。这是浪费CPU周期并撤消与不可变字符串相关的任何潜在优化。此外,依赖description
的结果永远不是正确的答案(尽管NSStrings几乎不可避免 - 这是一个点,你可以依赖于结果)。
这(已修复):
cityName = [NSString stringWithFormat:@"%@", [array objectAtIndex:6]];
timeZoneName = [NSString stringWithFormat:@"%@", [array objectAtIndex:7]];
可能是:
cityName = [array objectAtIndex:6];
timeZoneName = [array objectAtIndex:7];
如果需要,请复制它。正如@dreamlax所说,请确保遵循内存管理规则。
答案 2 :(得分:0)
使用以下
cityName = [NSString stringWithFormat:@"%@", [array objectAtIndex:6]];
您需要对整数使用%d或%i,并且%@用于字符串对象。