【问题标题】:onFormat string For NSPredicateNSPredicate 的 onFormat 字符串
【发布时间】:2016-09-17 11:29:30
【问题描述】:

我想用“id”键对数据进行排序,我如何理解NSPredicate 格式的格式字符串是什么?我有一个 100 号的帖子。 我的代码:

 let objectIDs = posts.map{$0.id}
    let predicate = NSPredicate(format: "self IN %@", objectIDs)
    let sortByUserId = NSSortDescriptor(key: "id", ascending: true)

我的描述有误:

无法解析“self IN %@”格式字符串。

解析 JSON 数据的代码:

func postsFromJSONData(data : NSData, inContext context: NSManagedObjectContext) -> PostResult {
            do{
            let jsonObject : [[String:AnyObject]]
            = try NSJSONSerialization.JSONObjectWithData(data, options: []) as! [[String:AnyObject]]

            for postJSON in jsonObject {
                if let post = postFromJsonObject(postJSON, incontext : context) {

                        finalPost.append(post)
                    }
                }

            return .Sucsess(finalPost)
            }
            catch let error {
                return .Failure(error)
            }

        }

Web 服务完成后获取主队列帖子:

func fetchRecentPost(completion completion: (PostResult) -> Void){

    let request = NSURLRequest(URL: recentPostURL(["":""]))

let task = session.dataTaskWithRequest(request, completionHandler: {
    (data, response, error)  in

    var result = self.processRecentPostRequest(data: data, error: error)

    if case let .Sucsess(posts) = result {

        let mainQueueContext = self.coreDataStack.mainQueueContext
        mainQueueContext.performBlockAndWait(){

            try! mainQueueContext.obtainPermanentIDsForObjects(posts)
        }

        let objectIDs = posts.map{$0.id}
        let predicate = NSPredicate(format: "self IN %@", objectIDs)
        let sortByUserId = NSSortDescriptor(key: "id", ascending: true)

        do{
            try self.coreDataStack.saveChanges()
            let mainQueuePosts = try self.fetchMainQueuePosts(predicate: predicate, sortDiscriptors: [sortByUserId])
            result = .Sucsess(mainQueuePosts)
        }
        catch let error {

            result = .Failure(error)
        }
    }

        completion(result)

        })

【问题讨论】:

  • 显示您想要排序的数据!
  • 您的问题不清楚,如果您只想对数组进行排序,您可以这样做。 var sortedPosts = posts.sort({ $0.id < $1.id })
  • 我正在尝试解析这个 JSON 并将帖子数据保存在核心数据 jsonplaceholder.typicode.com/posts
  • 然后向我们展示您为解析和核心数据保存编写的代码。此外,您的 json 数组已经按 id 升序排序。
  • 你的核心数据属性也是id?

标签: ios swift nspredicate format-string


【解决方案1】:

你的预测应该是这样的

let predicate = NSPredicate(format: "id IN %@", objectIDs)
let sortByUserId = NSSortDescriptor(key: "id", ascending: true)

注意:self.id IN %@id IN %@

【讨论】:

  • 我不需要对我的数据进行排序吗?每当我的应用程序运行我的数据添加到数据库文件中最后保存的数据时,为什么会发生这种情况?
  • 如果您的数据没有排序而不是排序,您现在是否使用谓词获取数据?
  • 我的 JSON 是按用户 ID 排序的,是的,我正在获取数据,但是当应用程序再次启动数据并再次添加到数据库时,我在数据库中的帖子现在超过 1000 个。
  • 你的意思是添加了重复记录?
  • 是的,当我第一次清除存储并启动应用程序时,我的帖子数为 100,当停止应用程序并再次启动数据时,数据达到 200,发生了什么?
猜你喜欢
  • 1970-01-01
  • 2014-11-12
  • 2014-09-14
  • 2011-03-25
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2013-01-14
相关资源
最近更新 更多