首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏肘子的Swift记事本

    SwiftUI 与 Core Data —— 数据定义

    ,目前暂时用 NSManagedObjectID 代替 var title: String var taskCount: Int}在上面的实现中,我们用 NSManagedObjectID 作为 TodoGroup 的 id 类型,但由于 NSManagedObjectID 同样需要在托管环境中才能创建,因此在下文中,它将会被其他的自定义类型所取代。 0 ) }}两者间的纽带 —— WrappedID由于 NSManagedObjectID 的存在,上面的两个协议仍无法脱离托管环境( 并非指 Core Data 框架 )。 由于 WrappedID 需要符合 Sendable ,因此上面的代码在编译时将出现如下警告( NSManagedObjectID 不符合 Sendable ):image-20221128142739129 庆幸的是,NSManagedObjectID 是线程安全的,可以被标注为 Sendable( 这点已经在 Ask Apple 10 月的问答中得到了官方的确认[5] )。

    2.9K40编辑于 2023-03-08
  • 来自专栏肘子的Swift记事本

    关于 Core Data 并发编程的几点提示

    使用 NSManagedObjectID 进行传递 因为托管对象是同托管它的上下文绑定在同一个队列上,因此,无法在不同队列的上下文之间传递 NSManageObject。 对于需要在不同的队列中对同一个数据记录进行操作情况,解决方式是使用 NSManagedObjectIDNSManagedObjectID 作为托管对象的紧凑通用标识符,被广泛使用于 Core Data 框架中。 例如在批量操作、持久化历史跟踪、上下文通知等等方面都是以 NSManagedObjectID 作为数据标识的。但需要注意的是,它并不是绝对不变的。 如果确有将 ID 归档的需要,可以将 NSManagedObjectID 转换成 URI 表示。

    1.2K20编辑于 2022-07-28
  • 来自专栏肘子的Swift记事本

    如何在 Core Data 中进行批量操作

    共三种:结果状态( statusOnly )、记录数量( count )、所有记录的 NSManagedObjectID ( objectIDs ) 。 需要注意的是,所有的 NSManagedObjectID 对应的实体( Entity )必须一致,比如本例中均为 Item 。 下面的代码将更新所有 timestamp 晚于三天前的 Item 数据,将其的 timestamp 更新为当前日期: func batchUpdateItem() async throws -> [NSManagedObjectID [NSManagedObjectID] } } 需要注意如下事项: propertiesToUpdate 中,如属性名称拼写错误将导致程序崩溃 propertiesToUpdate 中,如更新值类型错误将导致程序崩溃 [NSManagedObjectID] ?? [] // 创建变动字典。根据数据变化类型,创建不同的键值对。

    2.4K30编辑于 2022-07-28
  • 来自专栏肘子的Swift记事本

    Core Data 是如何在 SQLite 中保存数据的

    本文将对这些表和字段进行介绍,或许可以换个角度帮助你解开部分疑惑,例如:Core Data 为什么不需要主键、NSManagedObjectID 是如何构成的 、保存冲突的判断依据是什么。 在将 NSManagedObjectID 转换成可存储的 URL 时,该值表示对应的持久化存储。 NSManagedObjectID 的构成 托管对象的 NSManagedObjectID 由:数据库 ID + 表 ID + 实体表中的主键共同构成。 通过将 NSManagedObjectID 转换成可存储格式的 URL ,可以将它的构成清晰地展示出来。 let url = itemSub.objectID.uriRepresentation() tableAndFieldInCoreData_nsmanagedObjectID_url 【 文件(持久化存储

    2.1K20编辑于 2022-07-28
  • 来自专栏Swift社区

    如何在后台执行 SwiftData 操作

    如果需要在线程之间传递对象,可以使用 NSManagedObjectID 来实现。SwiftData 并发支持SwiftData 利用了 Swift 的现代并发特性。 取而代之的是,可以使用 NSManagedObjectID 来在不同的线程之间传递对象。此外,文章还提到了一些问题,如在后台上下文上执行的更改可能不会立即合并到主视图上下文中。

    63922编辑于 2024-06-16
  • 来自专栏肘子的Swift记事本

    肘子的 Swift 周报 #051| Xcode 并不孤单

    前一期内容|全部周报列表 原创 NSManagedObjectID 与 PersistentIdentifier:掌握 Core Data 与 SwiftData 中的数据标识符[5] Fatbobman 在这两个框架中,NSManagedObjectID 和 PersistentIdentifier 功能相似,且都极为重要。本文将深入探讨它们的功能、使用方法及注意事项。 itemName=sswg.swift-lang [5] NSManagedObjectID 与 PersistentIdentifier:掌握 Core Data 与 SwiftData 中的数据标识符

    1K10编辑于 2024-11-23
  • 来自专栏肘子的Swift记事本

    SwiftDataKit:让你在 SwiftData 中使用 Core Data 的高级功能

    另外,SwiftData 的 PersistentIdentifier 符合 Codable 协议,这使我们可以在它与 NSManagedObjectID 之间进行转换。 利用 PersistentIdentifier 的 decode 构造方法,SwiftDataKit 支持将 NSManagedObjectID 转换为 PersistentIdentifier,用下面的代码 由于 NSManagedObjectID 在不同 NSPersistentStoreCoordinator 间无法保持一致,可以使用 SwiftDataKit 提供的如下功能: 将 PersistentIdentifier

    71920编辑于 2023-09-18
  • 来自专栏肘子的Swift记事本

    SwiftDataKit:让你在 SwiftData 中使用 Core Data 的高级功能

    另外,SwiftData 的 PersistentIdentifier 符合 Codable 协议,这使我们可以在它与 NSManagedObjectID 之间进行转换。 利用 PersistentIdentifier 的 decode 构造方法,SwiftDataKit 支持将 NSManagedObjectID 转换为 PersistentIdentifier,用下面的代码 由于 NSManagedObjectID 在不同 NSPersistentStoreCoordinator 间无法保持一致,可以使用 SwiftDataKit 提供的如下功能: 将 PersistentIdentifier

    79240编辑于 2023-09-18
  • 来自专栏iOS底层原理

    iOS-内存管理(一)

    OBJC_TAG_NSAtom =0, OBJC_TAG_1 =1, OBJC_TAG_NSString =2, OBJC_TAG_NSNumber =3, OBJC_TAG_NSIndexPath=4, OBJC_TAG_NSManagedObjectID

    1.1K00发布于 2020-12-18
  • 来自专栏肘子的Swift记事本

    如何通过 Persistent History Tracking 观察 SwiftData 的数据变化

    数据信息转换:持久化历史跟踪事务中包含的数据信息为 NSManagedObjectID,需要使用 SwiftDataKit[6] 将其转换为PersistentIdentifier,以便在SwiftData private func changeHandler(_ change: NSPersistentHistoryChange) { // 通过 SwiftDataKit ,将 NSManagedObjectID

    72220编辑于 2023-11-02
  • 来自专栏iOS开发~

    iOS_Tagged Pointer是什么,结构

    = 2, OBJC_TAG_NSNumber = 3, OBJC_TAG_NSIndexPath = 4, OBJC_TAG_NSManagedObjectID

    67430编辑于 2022-07-20
  • 来自专栏iOS面试

    WWDC笔记 - Advancements in the Objective-C Runtime

    OBJC_TAG_NSString = 2, OBJC_TAG_NSNumber = 3, OBJC_TAG_NSIndexPath = 4, OBJC_TAG_NSManagedObjectID

    1.5K1815发布于 2020-07-09
  • 来自专栏肘子的Swift记事本

    Ask Apple 2022 中与 Core Data 有关的问答

    是否可以使用 @unchecked Sendable 标注 NSManagedObjectIDQ:在可以确保 NSManagedObjectID 不是临时状态的情况下,是否可以使用 @unchecked 在 Core Data 中,NSManagedObjectID 是线程安全的。通过向其他的上下文传递 ID,并通过该 ID 在不同线程的上下文中获取托管对象,这样可以确保应用不会出现崩溃。

    4.7K20编辑于 2023-03-08
  • 来自专栏肘子的Swift记事本

    在Spotlight中展示应用中的Core Data数据

    }} •通过userinfo中的kCSSearchableItemActivityIdentifier键获取到uniqueIdentifier(Core Data数据的uri)•将uri转换成NSManagedObjectID

    1.9K10编辑于 2022-07-28
  • 来自专栏肘子的Swift记事本

    在 Core Data 中查询和使用 count 的若干方法

    . */ 因为在 fetch 的过程中,通过 relationshipKeyPathsForPrefetching 中指定的关系数据的 NSManagedObjectID 已被一并提取。

    6.7K20编辑于 2022-07-28
  • 来自专栏肘子的Swift记事本

    实时切换 Core Data 的云同步状态

    localContainer } return cloudContainer } // 某些权限检查工作,仅用于举例 func checkPermission(id:NSManagedObjectID

    2.1K20编辑于 2022-07-28
  • 来自专栏肘子的Swift记事本

    如何在 Core Data 中对 NSManagedObject 进行深拷贝

    最好在深拷贝操作前后使用 NSManagedObjectID 进行数据传递。 内存占用 当深拷贝的托管对象牵涉大量的关系数据时,则可能会形成大量的内存占用。

    2.6K20编辑于 2022-07-28
  • 来自专栏冰霜之地

    手把手教你从 Core Data 迁移到 Realm - 简书

    Core Data objects通过内部的NSManagedObjectID属性去唯一标识一个objects,Realm把这个留给开发者去完成。

    83110编辑于 2024-02-14
  • 来自专栏肘子的Swift记事本

    SwiftData 中的并发编程

    PersistentIdentifier 可以被视为 NSManagedObjectId 的 SwiftData 实现。

    73630编辑于 2023-10-16
  • 来自专栏肘子的Swift记事本

    SwiftUI 与 Core Data —— 数据获取

    在 Reducer 中获取并管理 WrappedID类似上面的方法,仅在 State 中保存线程安全的 WrappedID( 包装后的 NSManagedObjectID )。

    5.7K30编辑于 2023-03-08
领券