CALayer的位置包含NaN:[nan -0.5]

7

当我运行我的应用程序时,我在控制台中看到这个日志:

CALayer position contains NaN: [nan -0.5]

该应用程序由一个UITaBar组成,其中第一个选项卡是UINavigationController。在NavController中,我启动了AddressBookPicker。在AddressBookPicker中,我只选择显示电话号码。
当我选择一个仅有电子邮件地址的联系人时,就会看到这个日志。我没有看到任何崩溃或任何问题,只是将日志打印到控制台上。希望确保这不是一个隐藏的问题,在启动后会导致崩溃。
下面是相关代码和堆栈跟踪的片段。不确定要粘贴哪些其他代码,请告诉我是否有任何可能有所帮助的部分。
感谢您的帮助/输入。
谢谢!
代码
ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];

NSArray *displayedItems = [NSArray arrayWithObjects: [NSNumber numberWithInt:kABPersonPhoneProperty]), nil];

picker.displayedProperties = displayedItems;

picker.peoplePickerDelegate = self;

[self presentModalViewController:picker animated:YES];

堆栈跟踪

#0    0x00096377 in NSLog

#1    0x046b38c9 in CALayerSetPosition

#2    0x046b3846 in -[CALayer setPosition:]

#3    0x046b375f in -[CALayer setFrame:]

#4    0x002f510b in -[UIView(Geometry) setFrame:]

#5    0x003dbe6d in -[UILabel setFrame:]

#6    0x023ed095 in -[ABPersonTableViewDataSource reloadNoValueLabelAnimated:]

#7    0x0244cf53 in -[ABPersonTableViewDataSource reloadDataIncludingHeaderView:invalidatePropertyData:]

#8    0x023f30d4 in -[ABPersonTableViewDataSource reloadDataIncludingHeaderView:]

#9    0x023eabc9 in -[ABPersonViewControllerHelper prepareViewWithDisplayedProperties:person:allowActions:]

#10    0x023ea6bc in -[ABPersonViewControllerHelper loadViewWithDisplayedProperties:person:allowDeletion:allowActions:]

#11    0x023ea598 in -[ABPersonViewController loadView]

#12    0x0036a54f in -[UIViewController view]

#13    0x003689f4 in -[UIViewController contentScrollView]

#14    0x003787e2 in -[UINavigationController _computeAndApplyScrollContentInsetDeltaForViewController:]

#15    0x00376ea3 in -[UINavigationController _layoutViewController:]

#16    0x0037812d in -[UINavigationController _startTransition:fromViewController:toViewController:]

#17    0x00372ccd in -[UINavigationController _startDeferredTransitionIfNeeded]

#18    0x00379d8b in -[UINavigationController pushViewController:transition:forceImmediate:]

#19    0x00372b67 in -[UINavigationController pushViewController:animated:]

#20    0x02403bc2 in -[ABPeoplePickerNavigationController pushViewController:animated:]

#21    0x0242a424 in -[ABPeoplePickerNavigationController showCardForPerson:withMemberCell:animate:forceDisableEditing:personViewController:]

#22    0x0242ce20 in -[ABMembersViewController showCardForPerson:withMemberCell:animate:]

#23    0x0240a0ef in -[ABMembersController abDataSource:selectedPerson:atIndexPath:withMemberCell:animate:]

#24    0x023fdb47 in -[ABMembersDataSource tableView:didSelectRowAtIndexPath:]

#25    0x00333a48 in -[UITableView _selectRowAtIndexPath:animated:scrollPosition:notifyDelegate:]

#26    0x0032a32e in -[UITableView _userSelectRowAtIndexPath:]

#27    0x0003f21a in __NSFireDelayedPerform

#28    0x02631f73 in __CFRUNLOOP_IS_CALLING_OUT_TO_A_TIMER_CALLBACK_FUNCTION__

#29    0x026335b4 in __CFRunLoopDoTimer

#30    0x0258fdd9 in __CFRunLoopRun

#31    0x0258f350 in CFRunLoopRunSpecific

#32    0x0258f271 in CFRunLoopRunInMode

#33    0x02f2f00c in GSEventRunModal

#34    0x02f2f0d1 in GSEventRun

#35    0x002ceaf2 in UIApplicationMain

#36    0x00002554 in main at main.m:14

嗨Danny,你解决了这个问题吗?我也遇到了同样的错误信息,只是NaN值不同而已。你有什么线索是什么导致了这个问题吗? - epologee
4个回答

1

我遇到了与" CALayer position contains NaN: "相关的同样问题:应用在 iOS3.x 和 iOS4.1 设备上运行正常,但在 iOS4.2 上崩溃。

在我的情况下,我有如下代码:

CGRect frame;
frame.size.height = kTableCellHeight - 11;
frame.size.width = widthCell - 30;

UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:frame];

UILabel的创建失败并显示了错误。在我的情况下,通过为frame.origin添加任意值来解决了这个问题(对于这个UILabel的目的,它并不重要)。
CGRect frame;
frame.size.height = kTableCellHeight - 11;
frame.size.width = widthCell - 30;
frame.origin.x = 0;
frame.origin.y = 0;

UILabel *descriptionLabel = [[UILabel alloc] initWithFrame:frame];

也许“CALayer position contains NaN”问题的原因是使用了一些nil、不完整或未定义的值或结构。

1

我也遇到了同样的问题,尽管似乎在内置应用程序(例如邮件)中不会发生。

一个稍微有些hackish的解决方法是将名字和姓氏添加到显示属性列表中-这种情况下不会显示“没有电子邮件地址”的层,但也不会崩溃。


1

这似乎会在iOS 4.2中导致崩溃。尝试选择一个没有电话号码的联系人,你应该会看到一个显示“无电话号码”的视图。当你返回到所有联系人再次选择该联系人时,就会发生崩溃。

还有其他人遇到这个问题吗?

编辑:在我的情况下,我只显示电子邮件地址。选择两个没有电子邮件地址的联系人会导致崩溃。


0
  1. 我不知道。

  2. 我也看到了这个问题 - 我正在做与你完全不同的事情 - 我正在使用route-me地图引擎来显示可滚动的地图。

我认为这可能与滚动视图有关 - 以及某种方式涉及滚动的层。由于你提到的一些视图我认为是可以滚动的 - 这与我的观察相符。

我希望我能为你提供更多的数据,但我可以告诉你的是,我已经在iPhone和iPad上测试了几个月的应用程序,并在3.2和4.0的操作系统下进行了测试,包括设备和模拟器,并且没有崩溃或内存泄漏[完全没有,或与此相关]。

所以简而言之 - 我不知道 - 但我认为你没问题!


很高兴知道这不会引起问题。在开发者社区也没有收到回复。 - dagnytaggart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接