gpt4 book ai didi

ios - _objc_empty_vtable 无法打开文件 "..."因为没有这样的文件

转载 作者:行者123 更新时间:2023-11-29 13:05:05 24 4
gpt4 key购买 nike

这是一道自答题。将它放在那里以帮助他人。

我的应用程序刚刚发生了一次非常有趣的崩溃。我想做的是定义一个排序比较器,它将返回模型中的静态方法。

因此,例如,如果我的模型是 Car,并且我想按名称排序,我会在 Car.m 中:

+ (NSComparator)nameSortAscendingComparator {
NSComparator nameSortAscendingComparator = ^NSComparisonResult(id obj1, id obj2) {
NSString *a = [(Car *)obj1 name];
NSString *b = [(Car *)obj2 name] ;
return [a compare:b] ;
};
}

调用代码看起来像这样:

    NSComparator comparator = [Car nameSortAscendingComparator];
_sortedCars = [cars sortedArrayUsingComparator:comparator];

运行它给出了一个真正的红鲱鱼异常。事实上,它看起来像这样:

Xcode's main debug window screenshot

断点停止于:

Thread 1, Queue : com.apple.main-thread
#0 0x0231fcbc in _objc_empty_vtable ()
#1 0x0280c70a in __56-[NSArray sortedArrayFromRange:options:usingComparator:]_block_invoke_0 ()
#2 0x0273f07d in __CFSimpleMergeSort ()
#3 0x0273f124 in __CFSimpleMergeSort ()
#4 0x0273f008 in CFSortIndexes ()
#5 0x0277ad71 in -[NSArray sortedArrayFromRange:options:usingComparator:] ()
#6 0x0279a2b5 in -[NSArray sortedArrayUsingComparator:] ()

它带我走上了各种各样的花园小径。 block 不能作为静态变量或通过静态方法访问吗?可能是在导致问题的 initialize 中执行了所有这些操作?

最佳答案

赠品是我未能发现的编译器警告。与往常一样,允许编译器警告累积可能是致命的。当问题发生时,它们掩盖了真正的问题。

在这种情况下,它是:

Control reaches end of non-void function

是的,我的 nameSortAscendingComparator 方法实际上没有返回任何内容。呸!问题解决了。

我很好奇的是,模糊的“没有这样的文件”消息背后的解释是什么?更不用说 _objc_empty_vtable 了。我很想知道更多关于 vtable 的信息,以及它与非 void 函数崩溃的关系。

关于ios - _objc_empty_vtable 无法打开文件 "..."因为没有这样的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18850793/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com