iOS 解析土耳其字符的 OrderByAscending 结果错误
iOS Parse OrderByAscending result wrong for Turkish Character
当我使用 "orderByAscending" 从 Parse 获取数据时,土耳其字符 (ç,ö,ü,vs) 和大写字符的结果 return 错误。
所有土耳其语字符排在结果末尾。
结果示例:
当前结果。这是错误的---- Ali,Ceyda,Mehmet,Zeynep,Çan,Ömer
预期结果。这是真的 ---- Ali,Ceyda,Çan,Mehmet,Ömer,Zeynep
大写字符示例:
当前结果。这是错误的---- BBC,Back,Bistro
预期结果。这是真的----返回,BBC,Bistro
我的代码如下:
func getData(){
let Query = PFQuery(className: "Table")
Query.limit = 1000
Query.orderByAscending("Name")
Query.findObjectsInBackgroundWithBlock { (objects, error) in
if error != nil {
print(error)
}else{
for object in objects! {
let name = object["Name"] as! String
let link = object["Link"] as! String
let logo = object["Logo"] as! PFFile
let isPremium = object["isPremium"] as! Int
let objectID = object.objectId
let LogoUrl = logo.url
Model.sharedInstance.items.addItem(name, link: link, logo: LogoUrl!, isPremium: isPremium,objectID:objectID!)
}
NSOperationQueue.mainQueue().addOperationWithBlock({
self.tableView.reloadData()
})
}
}
}
我该如何处理这种情况?
谢谢。
您可以手动对(可能有缺陷的)服务器后端返回的对象数组进行排序:
Query.findObjectsInBackgroundWithBlock { (objects, error) in
if error != nil {
print(error)
} else {
// sort the objects by hand
let sortedObjects = objects!.sort { // in Swift 3, use "sorted" instead
let nameA = [=10=]["Name"] as! String
let nameB = ["Name"] as! String
return nameA < nameB
}
for object in sortedObjects {
// do your work with the ordered objects
}
NSOperationQueue.mainQueue().addOperationWithBlock({
self.tableView.reloadData()
})
}
}
请注意,我提供的代码将顺序传递给标准 Swift 字符串比较运算符(“<”)。您也可以使用其他方法手动对查询结果进行排序 as shown in this question.
当我使用 "orderByAscending" 从 Parse 获取数据时,土耳其字符 (ç,ö,ü,vs) 和大写字符的结果 return 错误。
所有土耳其语字符排在结果末尾。 结果示例:
当前结果。这是错误的---- Ali,Ceyda,Mehmet,Zeynep,Çan,Ömer
预期结果。这是真的 ---- Ali,Ceyda,Çan,Mehmet,Ömer,Zeynep
大写字符示例:
当前结果。这是错误的---- BBC,Back,Bistro
预期结果。这是真的----返回,BBC,Bistro
我的代码如下:
func getData(){
let Query = PFQuery(className: "Table")
Query.limit = 1000
Query.orderByAscending("Name")
Query.findObjectsInBackgroundWithBlock { (objects, error) in
if error != nil {
print(error)
}else{
for object in objects! {
let name = object["Name"] as! String
let link = object["Link"] as! String
let logo = object["Logo"] as! PFFile
let isPremium = object["isPremium"] as! Int
let objectID = object.objectId
let LogoUrl = logo.url
Model.sharedInstance.items.addItem(name, link: link, logo: LogoUrl!, isPremium: isPremium,objectID:objectID!)
}
NSOperationQueue.mainQueue().addOperationWithBlock({
self.tableView.reloadData()
})
}
}
}
我该如何处理这种情况?
谢谢。
您可以手动对(可能有缺陷的)服务器后端返回的对象数组进行排序:
Query.findObjectsInBackgroundWithBlock { (objects, error) in
if error != nil {
print(error)
} else {
// sort the objects by hand
let sortedObjects = objects!.sort { // in Swift 3, use "sorted" instead
let nameA = [=10=]["Name"] as! String
let nameB = ["Name"] as! String
return nameA < nameB
}
for object in sortedObjects {
// do your work with the ordered objects
}
NSOperationQueue.mainQueue().addOperationWithBlock({
self.tableView.reloadData()
})
}
}
请注意,我提供的代码将顺序传递给标准 Swift 字符串比较运算符(“<”)。您也可以使用其他方法手动对查询结果进行排序 as shown in this question.