V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
iOS 开发实用技术导航
NSHipster 中文版
http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
http://www.cocos2d-iphone.org/
CocoaPods
http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
http://code.google.com/mobile/analytics/
WWDC
https://developer.apple.com/wwdc/
Design Guides and Resources
https://developer.apple.com/design/
Transcripts of WWDC sessions
http://asciiwwdc.com
Cocoa with Love
http://cocoawithlove.com/
Cocoa Dev Central
http://cocoadevcentral.com/
NSHipster
http://nshipster.com/
Style Guides
Google Objective-C Style Guide
NYTimes Objective-C Style Guide
Useful Tools and Services
Charles Web Debugging Proxy
Smore
AlwaysBee
V2EX  ›  iDev

[求助] 关于 SwiftUI @FetchRequest nsPredicate 在更新数据之后变为 nil 的问题

  •  
  •   AlwaysBee · 173 天前 · 5102 次点击
    这是一个创建于 173 天前的主题,其中的信息可能已经有所发展或是发生改变。

    简单描述一下我这里遇到的问题: 背景: 主页 Page A ,列表页 Page B ,两个页面都会通过 @FetchRequest 这个 property wrapper 获取数据,并且是根据日期作为过滤条件,start_date >= ... and start_date < ...

      @FetchRequest(sortDescriptors: [SortDescriptor(\PlanItem.start_time)])
      private var plans: FetchedResults<PlanItem>
    
    ....// 省略
    
      self.plans.nsPredicate = NSPredicate(format: "%K >= %@ AND %K < %@", #keyPath(PlanItem.start_time), startDate as NSDate,#keyPath(PlanItem.start_time), endDate as NSDate )
    

    当从 Page A navigate 到 Page B ,且此时 Page A 显示的数据和 Page B 的数据同一天的,也即他们的过滤条件是一致的,如果此时在 Page B 添加该日期的数据或者更新数据,则会导致列出所有日期的数据的问题,也就是日期条件失效了,通过排查发现是 nsPredicate 变为 nil 了。 但如果我此时将 Page B 的日期切换到后一天(即和 Page A 的过滤条件不一致),进行同样的更新操作,则正常运行

    在官方论坛找到了一个近似的问题 https://developer.apple.com/forums/thread/692040

    相关: https://www.raywenderlich.com/27201015-dynamic-core-data-with-swiftui-tutorial-for-ios

    2 条回复    2021-11-29 13:52:44 +08:00
    hstdt
        1
    hstdt  
       172 天前 via iPhone
    我一般再封装一层 View ,把 predicate 作为参数,在 init 方法里面全初始化掉,不会再去修改 predicate
    AlwaysBee
        2
    AlwaysBee  
    OP
       172 天前 via iPhone
    @hstdt 是的,我也是这么做的。
    这次用了 iOS 15 的新特性,可以动态地更新 predicate ,在帖子里的情况会出问题
    关于   ·   帮助文档   ·   API   ·   FAQ   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   2643 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 03:08 · PVG 11:08 · LAX 20:08 · JFK 23:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.