iOS二进制搜索代码崩溃超过256个项目

时间:2019-06-06 13:00:53

标签: ios arrays objective-c search binary-search

我已经使用iOS默认代码在自定义词典对象中搜索字符串,该对象存在于字典项的均值数组中。

contactform.blade.php

当我使用少于256个对象的相同代码时,代码正常工作而不会崩溃,NSRange searchRange = NSMakeRange(0, artistThumbnail.count); index = [artistThumbnail indexOfObject:artist inSortedRange:searchRange options:NSBinarySearchingLastEqual usingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSString *artistName = (NSString *)obj2; NSDictionary *artistThumbnail = (NSDictionary *)obj1; NSString *artistToCompare = artistThumbnail[_artist_thumb]; NSComparisonResult result = [artistToCompare compare:artistName]; return result; }]; Obj1都具有字典对象,但是当数组具有> 256个项目时,它崩溃并且我'已经注意到obj1和obj2与以前的不一样,总是以Obj2格式出现。

1 个答案:

答案 0 :(得分:1)

问题是比较对象的类型与数组元素的类型不同。如果您以context的形式正确键入数组,则会收到一条警告,提示参数NSArray<NSDictionary *> *的类型应为indexOfObject

此外,您不能依靠NSDictionary *对象始终作为artist传递给比较函数。该文档没有对此进行任何说明,因此您应该假定它有时可以obj2的形式传递,而有时可以obj1的形式传递。

要解决该问题,您可以将obj2嵌入字典中,使其与artist这样的数组元素具有相同的格式。然后您以相同的方式从两个参数中检索名称。

@{ _artist_thumb: artist }