Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.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
Iphone 核心数据(SQLite支持)字符串的自定义排序_Iphone_Ipad_Core Data - Fatal编程技术网

Iphone 核心数据(SQLite支持)字符串的自定义排序

Iphone 核心数据(SQLite支持)字符串的自定义排序,iphone,ipad,core-data,Iphone,Ipad,Core Data,我目前有一个SQLite支持的核心数据应用程序,在这个应用程序中,我将获取按firstName和lastName排序的记录 问题是我有一些名字,比如(John Doe),它们又回到了列表的顶部,似乎默认的排序行为是按ASCII排序顺序完成的 是否有任何方法强制这些记录在Z之后显示 我读过关于自定义排序描述符的文章,但它们似乎不起作用,因为核心数据依靠SQLite进行排序 更新 下面是我的数据现在的示例列表 (Abe Simpson) (Bob Dole) (Chris Rock) Alan We

我目前有一个SQLite支持的核心数据应用程序,在这个应用程序中,我将获取按firstName和lastName排序的记录

问题是我有一些名字,比如
(John Doe)
,它们又回到了列表的顶部,似乎默认的排序行为是按ASCII排序顺序完成的

是否有任何方法强制这些记录在
Z
之后显示

我读过关于自定义排序描述符的文章,但它们似乎不起作用,因为核心数据依靠SQLite进行排序

更新

下面是我的数据现在的示例列表

(Abe Simpson)
(Bob Dole)
(Chris Rock)
Alan West
Brian Regan
我希望它看起来像什么

Alan West
Brian Regan
(Abe Simpson)
(Bob Dole)
(Chris Rock)

阅读SQLite中的自定义排序规则。不过,您可能无法在i-devices上访问它们。

插入括号的原因是什么?如果在一个单独的属性中用显式信息替换此隐式信息,然后该属性可用于指导排序,那么您可能会使事情变得更容易。添加一个新的BOOL属性,称为括号内的
,然后

- (void)setName:(NSString *)name
{
    [self willChangeValueForKey:@"name"];
    [self setPrimitiveName:name];
    [self didChangeValueForKey:@"name"];
    self.parenthesized = ([name hasPrefix:@"("] &&
                          [name hasSuffix:@")"]);
}
当您进行提取时:

[fetchRequest setSortDescriptors:
 [NSArray arrayWithObjects:
  [NSSortDescriptor sortDescriptorWithKey:@"parenthesized" ascending:NO],
  [NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES],
  nil]];

我认为有一个非常简单的答案/解决方案。这对我来说是本地的(不是iPhone)

在阅读完你的文章后,你希望他们在底部。上面的内容将对它们进行排序,就好像忽略了括号一样。下面将得到您想要的输出(尽管看起来有些粗糙)


在执行核心数据提取时,您将获得一个数组,使用-(void)sortUsingSelector:(SEL)comparator对数组进行排序
方法。然后,您可以编写自己的排序方法,如果元素较早,则返回nsorderscending;如果元素较晚,则返回nsorderscending;如果元素相同,则返回NSOrderSame。

核心数据似乎不允许自定义排序您想要什么,需要在末尾强制放置一些记录,而不需要任何短基。我不认为这(John Doe)最终会在排序后出现在z之后。这是客户存储/分割部分数据的方式(不是一个好方法),这基本上是我无法控制的,尽管缺少他们不想要的括号。我想我可以在记录中添加某种标志,告诉它显示在列表的底部或其他地方…实际上Daniels solutions看起来不错,它提供了两种WorldsJSUGG的最佳功能,我不是直接使用SQL语句访问SQLite,我是使用核心数据来处理抓取。谢谢您的考虑啊,所以无法发送排序参数?不幸的是,不是这样,至少我不知道。我使用NSFetchedResultsController是为了提高效率,因为我有可能大量的记录。我无法将整个结果集加载到NSArray中并使用此排序方法。在这种情况下,可以选择停止使用NSFetchedResultsController,或者可能将这些元素拆分为另一个实体,我倾向于使用第一个实体,但在传递有关上下文更改的通知时必须非常小心。谢谢Daniel,这种方法非常适合我。如果括号中是一个BOOL集,在排序描述符中升序为YES,则在列表底部显示,这对以后查看此项的人来说是一个旁注。
order by replace(firstName, '(','')
order by replace(firstName, '(','ZZZ')