gpt4 book ai didi

ios - 通用 NSManagedObject 的 sortDescriptorWithKey

转载 作者:行者123 更新时间:2023-11-28 22:22:44 25 4
gpt4 key购买 nike

我有一本 NSManagedObject Book,它与 NSManagedObject Title 有一对多关系,它有一个 NSString 属性 titleName

Title 对象没有子类化。它只是一个通用的 NSManagedObject。所以你不能简单地通过调用 title.titleName; 来访问 titleName 属性,你必须调用 [title valueForKey:@“titleName”];

我认为带有键的 NSSortDescriptor 实际上会在访问该键时调用 valueForKey,但显然不会;以下代码生成“无法识别的选择器”异常:

// Verify that “titles” have a property “titleName” that is an NSString.
for (NSManagedObject *title in self.book.titles)
logIt(@"\ntitle name: %@.", [title valueForKey:@"titleName"]); // prints strings as expected, proving that “titleName” really is an NSString
// Set up the sort descriptor on “titleName” property and use it.
NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"titleName" ascending:YES selector:@selector(localizedCaseInsensitiveCompare)];
NSArray *arrayOfTitles = [self.book.titles sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

这是崩溃时打印的内容:-[NSCFString localizedCaseInsensitiveCompare]: unrecognized selector sent to instance…

看起来 NSSortDescriptor 未能深入挖掘字符串属性,因此它试图在一些未识别的非字符串对象上调用 localizedCaseInsensitiveCompare。听起来对吗?如果是这样,是否可以使用 NSSortDescriptor 解决该问题,或者我是否必须运行自定义比较器 block ?

最佳答案

您忘记了结尾的冒号 :,它是选择器的一部分:

@selector(localizedCaseInsensitiveCompare:)

sortDescriptorWithKey 使用 Key-Value 编码访问属性是正确的。

关于ios - 通用 NSManagedObject 的 sortDescriptorWithKey,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19882004/

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