Ios 奇怪的plist行为在第一个值返回null,当它应该是12时返回13
当使用plist并试图返回数据时,我有这种奇怪的行为。为了给你一个概览,plist在每个对象中有12个条目,所以我期望12个条目,但是我得到13个条目,第一个结果是null,而剩下的12个条目实际上是正确的 这是我的plist文件:Ios 奇怪的plist行为在第一个值返回null,当它应该是12时返回13,ios,objective-c,plist,icarousel,Ios,Objective C,Plist,Icarousel,当使用plist并试图返回数据时,我有这种奇怪的行为。为了给你一个概览,plist在每个对象中有12个条目,所以我期望12个条目,但是我得到13个条目,第一个结果是null,而剩下的12个条目实际上是正确的 这是我的plist文件: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/Prope
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Name</key>
<array>
<string>Audit</string>
<string>Tax</string>
<string>Digital</string>
<string>Consulting</string>
<string>Risk Advisory</string>
<string>Finance</string>
<string>Audit</string>
<string>Tax</string>
<string>Digital</string>
<string>Consulting</string>
<string>Advisory</string>
<string>Finance</string>
</array>
<key>Logo</key>
<array>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
<string>page.png</string>
</array>
</dict>
</plist>
awakeFromNib中for循环中包含的“第一个索引名”的输出为:
2013-05-21 22:43:23.875 Pack[7496:c07] First Index Name 0
2013-05-21 22:43:23.877 Pack[7496:c07] First Index Name 1
2013-05-21 22:43:23.878 Pack[7496:c07] First Index Name 2
2013-05-21 22:43:23.879 Pack[7496:c07] First Index Name 3
2013-05-21 22:43:23.880 Pack[7496:c07] First Index Name 4
2013-05-21 22:43:23.880 Pack[7496:c07] First Index Name 5
2013-05-21 22:43:23.881 Pack[7496:c07] First Index Name 6
2013-05-21 22:43:23.881 Pack[7496:c07] First Index Name 7
2013-05-21 22:43:23.882 Pack[7496:c07] First Index Name 8
2013-05-21 22:43:23.882 Pack[7496:c07] First Index Name 9
2013-05-21 22:43:23.883 Pack[7496:c07] First Index Name 10
2013-05-21 22:43:23.883 Pack[7496:c07] First Index Name 11
正如你所看到的,我得到了所有12个值的正确顺序,这是我对第二个值的期望,但这就是问题所在。对于包含在-(UIView*)carousel:(iCarousel*)carousel view For itematIndex:(NSUInteger)index reusingView:(UIView*)view
中的第二个NSLog,我正在输出items
数组,以查看发生了什么。这就是我所看到的:
2013-05-21 22:43:23.916 Pack[7496:c07] companyName: 0
2013-05-21 22:43:23.918 Pack[7496:c07] companyName: 0
2013-05-21 22:43:23.919 Pack[7496:c07] companyName: 11
2013-05-21 22:43:23.920 Pack[7496:c07] companyName: 7
2013-05-21 22:43:23.921 Pack[7496:c07] companyName: 6
2013-05-21 22:43:23.922 Pack[7496:c07] companyName: 2
2013-05-21 22:43:23.922 Pack[7496:c07] companyName: 1
2013-05-21 22:43:23.923 Pack[7496:c07] companyName: 10
2013-05-21 22:43:23.924 Pack[7496:c07] companyName: 9
2013-05-21 22:43:23.925 Pack[7496:c07] companyName: 8
2013-05-21 22:43:23.925 Pack[7496:c07] companyName: 5
2013-05-21 22:43:23.926 Pack[7496:c07] companyName: 4
2013-05-21 22:43:23.927 Pack[7496:c07] companyName: 3
同样,前两个结果都是0
,并且排序与第一次迭代不同,非常混乱。我提到了plist不一定按顺序输出,因为它们只是关键对象,所以我知道了,但核心问题是前两个结果
如果我更改NSLog以输出self.packName
(如下所示:NSLog(@“companyName:%@,[self.packName objectAtIndex:index]);
)返回的结果如下:
2013-05-21 22:49:43.663 Pack[7543:c07] companyName: (null)
2013-05-21 22:49:43.665 Pack[7543:c07] companyName: Audit
2013-05-21 22:49:43.666 Pack[7543:c07] companyName: Finance
2013-05-21 22:49:43.667 Pack[7543:c07] companyName: Tax
2013-05-21 22:49:43.668 Pack[7543:c07] companyName: Audit
2013-05-21 22:49:43.669 Pack[7543:c07] companyName: Digital
2013-05-21 22:49:43.669 Pack[7543:c07] companyName: Tax
2013-05-21 22:49:43.670 Pack[7543:c07] companyName: Risk Advisory
2013-05-21 22:49:43.671 Pack[7543:c07] companyName: Consulting
2013-05-21 22:49:43.672 Pack[7543:c07] companyName: Digital
2013-05-21 22:49:43.672 Pack[7543:c07] companyName: Finance
2013-05-21 22:49:43.673 Pack[7543:c07] companyName: Risk Advisory
2013-05-21 22:49:43.673 Pack[7543:c07] companyName: Consulting
正如您再次看到的,第一个结果是(null)
,我不明白为什么会发生这种情况
为了进一步调试,我运行了这个NSLog:NSLog(@“companyName:%@”,packName)
以数组形式输出原始结果,结果如下:
2013-05-21 22:52:59.284 Pack[7581:c07] companyName: (
"Audit",
"Tax",
"Digital",
"Consulting",
"Risk Advisory",
"Finance",
"Audit",
"Tax",
"Digital",
"Consulting",
"Advisory",
"Finance"
)
数组中没有(null)
结果,因此我不知道这个恶意null值来自何处
任何帮助都将不胜感激
对于包含在carousel:viewForItemAtIndex:reusingView:
中的第二个NSLog,我正在输出items数组,以查看发生了什么
不,您只输出了项的一个元素
:在iCarousel委托回调中传递了索引的元素。您无法控制iCarousel何时发送此消息,并且未指定索引的顺序。这就解释了下面的输出
2013-05-21 22:43:23.916 Pack[7496:c07] companyName: 0
2013-05-21 22:43:23.918 Pack[7496:c07] companyName: 0
2013-05-21 22:43:23.919 Pack[7496:c07] companyName: 11
...
同样,前两个结果都是0,并且与第一次迭代不同,排序非常混乱。我发现了一个线程,其中提到plist不一定按顺序输出,因为它们只是关键对象,所以我得到了这一点,但核心问题是前两个结果
如前所述,顺序取决于iCarousel的实施。这与夹缝无关。你误读了链接的帖子,可能是因为字典的顺序。当然,plist保留数组元素顺序
如果我更改NSLog以输出self.packName的结果(如:NSLog(@“companyName:%@,[self.packName objectAtIndex:index]),则返回的结果如下:
2013-05-21 22:49:43.663 Pack[7543:c07] companyName: (null)
2013-05-21 22:49:43.665 Pack[7543:c07] companyName: Audit
2013-05-21 22:49:43.666 Pack[7543:c07] companyName: Finance
2013-05-21 22:49:43.667 Pack[7543:c07] companyName: Tax
2013-05-21 22:49:43.668 Pack[7543:c07] companyName: Audit
2013-05-21 22:49:43.669 Pack[7543:c07] companyName: Digital
2013-05-21 22:49:43.669 Pack[7543:c07] companyName: Tax
2013-05-21 22:49:43.670 Pack[7543:c07] companyName: Risk Advisory
2013-05-21 22:49:43.671 Pack[7543:c07] companyName: Consulting
2013-05-21 22:49:43.672 Pack[7543:c07] companyName: Digital
2013-05-21 22:49:43.672 Pack[7543:c07] companyName: Finance
2013-05-21 22:49:43.673 Pack[7543:c07] companyName: Risk Advisory
2013-05-21 22:49:43.673 Pack[7543:c07] companyName: Consulting
带有(null)结果的行只能表示一件事:在第一次回调时,项
ivar尚未初始化objectAtIndex:
永远不能返回nil
,因此这是唯一的解释。您可以使用调试器检查,在回调和awakeFromNib
中设置断点
对于包含在carousel:viewForItemAtIndex:reusingView:
中的第二个NSLog,我正在输出items数组,以查看发生了什么
不,您只输出了项的一个元素
:在iCarousel委托回调中传递了索引的元素。您无法控制iCarousel何时发送此消息,并且未指定索引的顺序。这就解释了下面的输出
2013-05-21 22:43:23.916 Pack[7496:c07] companyName: 0
2013-05-21 22:43:23.918 Pack[7496:c07] companyName: 0
2013-05-21 22:43:23.919 Pack[7496:c07] companyName: 11
...
同样,前两个结果都是0,并且与第一次迭代不同,排序非常混乱。我发现了一个线程,其中提到plist不一定按顺序输出,因为它们只是关键对象,所以我得到了这一点,但核心问题是前两个结果
如前所述,顺序取决于iCarousel的实施。这与夹缝无关。你误读了链接的帖子,可能是因为字典的顺序。当然,plist保留数组元素顺序
如果我更改NSLog以输出self.packName的结果(如:NSLog(@“companyName:%@,[self.packName objectAtIndex:index]),则返回的结果如下:
2013-05-21 22:49:43.663 Pack[7543:c07] companyName: (null)
2013-05-21 22:49:43.665 Pack[7543:c07] companyName: Audit
2013-05-21 22:49:43.666 Pack[7543:c07] companyName: Finance
2013-05-21 22:49:43.667 Pack[7543:c07] companyName: Tax
2013-05-21 22:49:43.668 Pack[7543:c07] companyName: Audit
2013-05-21 22:49:43.669 Pack[7543:c07] companyName: Digital
2013-05-21 22:49:43.669 Pack[7543:c07] companyName: Tax
2013-05-21 22:49:43.670 Pack[7543:c07] companyName: Risk Advisory
2013-05-21 22:49:43.671 Pack[7543:c07] companyName: Consulting
2013-05-21 22:49:43.672 Pack[7543:c07] companyName: Digital
2013-05-21 22:49:43.672 Pack[7543:c07] companyName: Finance
2013-05-21 22:49:43.673 Pack[7543:c07] companyName: Risk Advisory
2013-05-21 22:49:43.673 Pack[7543:c07] companyName: Consulting
带有(null)结果的行只能表示一件事:在第一次回调时,
项
ivar尚未初始化objectAtIndex:
永远不能返回nil
,因此这是唯一的解释。您可以使用调试器检查,在回调中设置断点,并awakeFromNib
感谢@Nikolai Ruhe将我引导到正确的方向。如果你看一下我上面的代码,你会发现在viewDidLoad
和awakeFromNib
中,我两次拉plist。修复方法是合并此文件,将plist代码放在awakeFromNib
中,并将其从viewDidLoad
中删除。感谢@Nikolai Ruhe将我引导到正确的方向。如果你看一下我上面的代码,你会发现在viewDidLoad
和awakeFromNib
中,我两次拉plist。修复方法是合并该文件,将plist代码放在awakeFromNib
中,并将其从viewDidLoad
中删除。
2013-05-21 22:49:43.663 Pack[7543:c07] companyName: (null)
2013-05-21 22:49:43.665 Pack[7543:c07] companyName: Audit
...