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

时间:2010-10-17 07:44:36

标签: iphone objective-c ios4

我在运行应用程序时在控制台中看到此日志:

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

4 个答案:

答案 0 :(得分:1)

这似乎导致iOS 4.2崩溃。尝试选择没有电话号码的联系人,您应该转到“无电话号码”的视图。当您返回“所有联系人”然后再次选择该联系人时,会发生崩溃。

是否有其他人遇到此问题?

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

答案 1 :(得分:1)

我遇到了同样的问题,虽然它似乎没有发生在内置的应用程序中(例如邮件)。

一个稍微麻烦的解决方法是将First和Last名称添加到显示的属性列表中 - 在这种情况下它不会显示“无电子邮件地址”图层,但也不会崩溃。

答案 2 :(得分: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位置包含NaN”的问题可能是因为使用了一些零,不完整或未定义的值或结构。

答案 3 :(得分:0)

  1. 我不知道。

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

  3. 相信它与滚动视图有关 - 而且某个层以某种方式涉及滚动。正如你提到的一些观点我认为是滚动 - 这与我的观察结果一致。

    我希望我能为您提供更多数据,但我可以告诉您的一件事是我已经为开发了应用程序,并且一直在测试它在iPhone和iPad,设备和模拟器上,在操作系统3.2和4.0下 - 并且没有崩溃或内存泄漏[根本没有,或者与此相关]。

    所以简而言之 - 不知道 - 但我认为你还可以!