Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 如何在Mac OS X 10.9上检测NaN传递到CoreGraphics API的位置_Cocoa_Core Graphics_Osx Mavericks - Fatal编程技术网

Cocoa 如何在Mac OS X 10.9上检测NaN传递到CoreGraphics API的位置

Cocoa 如何在Mac OS X 10.9上检测NaN传递到CoreGraphics API的位置,cocoa,core-graphics,osx-mavericks,Cocoa,Core Graphics,Osx Mavericks,我有一个非常大的图形Mac应用程序,现在我在10.9GM的控制台上收到了很多下面的消息 <Error>: Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API. This is a serious error and contributes to an overall degradatio

我有一个非常大的图形Mac应用程序,现在我在10.9GM的控制台上收到了很多下面的消息

<Error>: Error: this application, or a library it uses, has passed an invalid numeric value (NaN, or not-a-number) to CoreGraphics API. This is a serious error and contributes to an overall degradation of system stability and reliability. This notice is a courtesy: please fix this problem. It will become a fatal error in an upcoming update.
:错误:此应用程序或其使用的库向CoreGraphics API传递了无效的数值(NaN或not-a-number)。这是一个严重的错误,会导致系统稳定性和可靠性的全面降低。此通知是出于礼貌:请解决此问题。这将成为即将进行的更新中的致命错误。
我注意到这些消息在调用[NSApp nexteventmachingmask:untilDate inMode:dequeue]后出现在调试器中,但我认为原因在其他地方。但是我有太多的地方使用可可图形。我在10点9分之前没有收到这样的信息

如何检测NaN传递到CoreGraphics API的位置


所以你应该在那一点上得到一个异常,所以一个异常断点应该可以工作

这里有一些事情需要注意

你可能弄乱了一个方法签名。。。即

-(float)myHeight
{
    return 56.0;
}
在子类中出错

-(int)myHeight
{
    return 42;
}
或者你有一些糟糕的数学,会发出一个NaN

有几种方法可以检测NaN。。。 c99已推出
isnan()


另外,ieee的float技巧
(f!=f)
也适用于NaN

我发现了问题。它在某个点被零除,导致矩阵中NaN元素的NSAffinetTransform。由于某些原因,编译器和操作系统在10.9之前就通过了这种情况。

经过深入研究,我发现您可以在Xcode中的“CGPostError”上设置一个符号断点,这将为您提供堆栈跟踪。

当我愚蠢地保留一个nspover以备将来使用时,我遇到了这个错误


似乎是
popover。showRelativeToRect(:)
是你所需要做的一切,然后你就可以忘记它了。

创建惰性
UIView
的习惯是使用
。零
帧在为
PDFView
执行此操作时对我不利

var pdfView = PDFView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))
这个

将从问题生成大量相同的日志。我之所以使用
.zero
,是因为后来我用约束设置了视图。这证明是个问题。解决方案是在初始化
PDFView
时使用任意非零帧

var pdfView = PDFView(frame: CGRect(x: 0, y: 0, width: 100, height: 100))

您需要进一步扩展堆栈跟踪。事件分派机制是运行循环的顶级功能,而不是图形堆栈。这些消息在跳过NextEventMachingMask后立即显示在控制台中:。看起来,错误事件在某处累积,然后一起显示。如何展开图形堆栈?堆栈跟踪窗格底部有一个滑块。将其一直向右滑动,然后查看哪个函数出现在跟踪的顶部。堆栈顶部除了我的当前函数外,没有任何其他函数出现。其他线程也没有与核心图形相关的内容。控制台窗口中只显示错误消息。在我的示例中,将另一个视图控制器设置为现有NSPopover实例导致了此错误。这实际上是一个异常吗?当然,它既不是Objul-C也不是C++。您过去可以在
cgerro
上设置断点,尽管我记得Quartz的错误消息中明确提到了这一点(但我以前从未遇到过这种特定错误)。(AppCode的用户:从2.1开始,它不支持符号断点——你必须使用Xcode来实现这一点。)是的,我真的不知道这是否是一个例外,我很久没有做过iOS开发了@appcode中的PeterHosey您是否可以访问原始gdb/lldb提示符?如果是这样,您可以设置一个符号断点。。。您甚至可以在xcode中设置一个条件为f的值=在AppCode中,有一个调试器控制台窗格,但有一半的时间它不工作(提示从未出现)。我不知道你所说的“f!=f的条件”是什么意思。@PeterHosey在Xcode中你可以设置一个条件断点,我相信你知道。。。但是条件是一些浮动f,f=f(本身)只对NaNOh有效,对吗。不过,潜在的NaN需要在范围之内。如果它在CG或基础代码中得到了No.1,这就限制了你可以在哪里使用。嗨,克里斯,你能解释一下如何在目标CIN中解决这个问题吗?我的例子是在一个静态VAR中存储一个nSPopOver引用,以便在多个视图对象之间共享。NSPopover似乎不喜欢在显示后被重用。按需重新制作popover,虽然并不理想,但却发出了警告。在CGPostError上中断显示错误是在nspover-showRelativeToRect:preferredEdge中生成的:这是一个令人兴奋的提示。