NSManagedObject 能否符合 NSCoding

2023-11-24

我需要跨设备传输单个对象。现在我正在将 NSManagedObject 转换为字典,将其存档并作为 NSData 发送。收到后我将其解档。但我真的很想通过归档和取消归档来传输 NSManagedObject 本身,而不是创建中间数据对象。

@interface Test : NSManagedObject<NSCoding>
@property (nonatomic, retain) NSString * title;
@end

@implementation Test
@dynamic title;

- (id)initWithCoder:(NSCoder *)coder {
    self = [super init];
    if (self) {
        self.title = [coder decodeObjectForKey:@"title"]; //<CRASH
    }
    return self;
}
- (void)encodeWithCoder:(NSCoder *)coder {
    [coder encodeObject:self.title forKey:@"title"];
}
@end


NSData *archivedObjects = [NSKeyedArchiver archivedDataWithRootObject:testObj];
NSData *objectsData = archivedObjects;
if ([objectsData length] > 0) {
    NSArray *objects = [NSKeyedUnarchiver unarchiveObjectWithData:objectsData];
}

上面代码的问题是。它崩溃于self.title in initWithCoder说无法识别的选择器发送到实例。

  • Why is title不被识别为选择器。
  • 在创建对象之前,应该以某种方式取消归档使用 nil 托管对象上下文initWithCoder?
  • 我需要覆盖吗copyWithZone?

下面的这段代码应该可以解决问题。主要区别在于调用super initWithEntity:insertIntoManagedObjectContext:

- (id)initWithCoder:(NSCoder *)aDecoder {
   NSEntityDescription *entity = [NSEntityDescription entityForName:@"Test" inManagedObjectContext:<YourContext>];

   self = [super initWithEntity:entity insertIntoManagedObjectContext:nil];
   NSArray * attributeNameArray = [[NSArray alloc] initWithArray:self.entity.attributesByName.allKeys];

   for (NSString * attributeName in attributeNameArray) {
        [self setValue:[aDecoder decodeObjectForKey:attributeName] forKey:attributeName];
   }
   return self;
}

上面的代码片段将仅处理属性,不处理关系。处理人际关系如NSManagedObjectID using NSCoding太可怕了。如果您确实需要引入关系,请考虑在解码时引入额外的属性来匹配两个(或多个)实体。

如何获得<YourContext>

(基于 Sam Soffes 的现已不可用的帖子,代码取自https://gist.github.com/soffes/317794#file-ssmanagementobject-m)

+ (NSManagedObjectContext *)mainContext {
     AppDelegate *appDelegate = [AppDelegate sharedAppDelegate];
return [appDelegate managedObjectContext];
}

注:更换<YourContext>在第一个片段中mainContext

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NSManagedObject 能否符合 NSCoding 的相关文章

  • 无法使用 Xamarin 和 WCF 访问 Web 服务

    我想使用 Xamarin 和 WCF 来使用公共 Web 服务 对于这个演示 我将使用Xamarin iOS 这是我试图使用的 公共 网络服务 http www webservicex net globalweather asmx WSDL
  • 应用程序传输安全已禁用,但仍然出现 SSL 握手错误

    我在通过 HTTPS SSL 连接到 API 时遇到问题 我已经使用下面的字典完全禁用了应用程序传输安全性 ATS 尽管 SSL 证书通过了 NSCURL 的所有测试
  • 如何将音乐从我的应用程序切换到 iPod

    我在用MusicPlayerController我的应用程序中的对象来播放音乐 我知道当 iPhone ipod 应用程序终止时 可以继续播放我的应用程序音乐 我该怎么做 这涉及到一些事情 您必须在两种音乐播放器之间进行选择 应用程序音乐播
  • 我什么时候应该对 IBOutlet 使用弱或强限定符? [复制]

    这个问题在这里已经有答案了 可能的重复 ARC 下 IBOutlets 应该强还是弱 https stackoverflow com questions 7678469 should iboutlets be strong or weak
  • 对使用phonegap和钛的质疑[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 最近我听说了 PhoneGap 和 Titanium 移动网络应用程序的开发 我分析了这两个 Web 应用程序 并了解了如何使用它们以
  • 我应该在哪个方法中设置 UITextField 的委托?

    在 viewDidLoad 或 init 方法中设置 UITextField 的委托是一个好习惯吗 我尝试在 init 方法中将委托设置为 self 但它没有调用相应的委托方法 当我将代码移动到 viewDidLoad 中时 它注册为将 s
  • NSPredicate 的 onFormat 字符串

    我想用 id 键对数据进行排序 我如何理解格式字符串的用途NSPredicate格式 我有一个100号的帖子 我的代码 let objectIDs posts map 0 id let predicate NSPredicate forma
  • 显示键盘时如何在 TextView 下方添加更多填充

    当我在 ScrollView 中有 TextField 并点击它时 键盘会按预期显示 但似乎 TextField 已向上移动到足以显示输入区域 但我希望移动到足够的位置 以便整体可见 否则它看起来像是被剪裁了的 我找不到改变这种行为的方法
  • KeyboardAvoidingView - 隐藏键盘时重置高度

    我正在使用 React NativeKeyboardAvoidingView设置我的高度View当显示键盘时 但是当我关闭应用程序中的键盘时 视图的高度不会变回原来的值
  • 使用GCD实现并发读独占写模型

    我试图了解使用 Grand Central Dispatch GCD 实现控制资源访问的并发读独占写模型的正确方法 假设有一个 NSMutableDictionary 被大量读取并且偶尔更新 确保读取始终与字典状态一致的正确方法是什么 当然
  • iOS崩溃核心位置CFBasicHashCreateCopy?

    我已经通过 Crashlytics 报告了这个问题 尽管我无法在本地复制它 所以除了下面的堆栈跟踪之外我没有什么可做的 不确定堆栈跟踪中是否引用了 CoreLocation与它有任何关系 但我不确定可能是什么原因 我的项目使用的是ARC 有
  • 在 cocoa touch 中以编程方式将视图位置设置为右上角

    我需要确保一个视图 A 尺寸 200x200 始终与第二个视图 B 全屏尺寸 内的右上角对齐 我想确保无论设备方向如何 视图 A 都保留在该位置 事实是 当使用界面生成器来定位视图时 我对此没有任何问题 但我需要以编程方式构建它 我想我应该
  • iPhone UI 带有 Tableview 或 Scrollview? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 斯威夫特/iOS。从导航堆栈中删除一些视图控制器

    这是我想做的 但我不确定这是否是正确的方法 所以请给我建议如何去做 我有初始 VC 和导航 VC 我从中推送第一个 VC 从中推送第二个 VC 接下来我介绍 来自第二个 VC 的 NavigationController 第三个 VC 现在
  • iOS 11 浏览器图像错误

    在 iOS 11 中滚动页面时出现以下错误 在 Firefox Safari 和 Chrome 中 在 Android 设备中 不会发生该错误 这些是背景图像 我不知道这是否是导致错误的原因 图 2 显示了图像在 Android 中的用途和
  • iOS:如何获取设备当前语言设置?

    我的应用程序中的一些功能应该基于其运行设备的语言设置 我想获取实际的语言而不是某些国家 地区设置 例如 如果语言是英语 我不在乎它是美国 英国 澳大利亚等 我很熟悉NSLocale对象 但它似乎与Region Format设置而不是Lang
  • iOS AFNetworking downloadProgressBlock 计算返回负数

    我正在使用 AFNetworking 下载使用第三方类解析的数据 我之前曾多次使用 AFNetworking 执行类似的操作 但由于某种原因 当我调用 downloadProgressBlock 并进行计算以与我的进度条一起使用时 数字返回
  • 将 OpenCV Mat 转换为数组(可能是 NSArray)

    我的 C C 技能很生疏 OpenCV 的文档也相当晦涩难懂 有没有办法获得cv Mat data属性转换为数组 NSArray 我想将其序列化为 JSON 我知道我可以使用 FileStorage 实用程序转换为 YAML XML 但这不
  • iTunes Connect 中缺少应用内购买部分

    我有一个应用程序处于准备提交状态 我还有该应用程序的应用程序内购买项目 上周我将它们链接到我的应用程序并提交以供审核 周末 开发商拒绝了它 现在我想重新提交修复后的版本 但 IAP 部分完全丢失 我怎样才能让它再次可见 我遇到过同样的问题
  • 通过 Apple 批量购买计划分发自定义 B2B iOS 应用程序?

    我们的要求是为组织内超过 1000 名用户分发 iOS 应用程序 我的问题 我们可以做吗使用 iOS Developer Provisioning Profile 分发 iPA 因为我们有 99 美元的 Apple 帐户 而不是企业帐户 并

随机推荐

  • 声纳想要关闭流[重复]

    这个问题在这里已经有答案了 我有下一个代码 private Stream
  • 如何在 Spring 3.1 应用程序中声明 JSF 托管 bean?

    这是我第一次开发基于 Java EE 架构的应用程序 我正在使用 JSF 2 0 春季3 1 JPA 2 0 我想请教您一个我有点困惑的问题 我想声明我的 JSF 托管 bean 但有很多解决方案可以处理此约束 在 faces config
  • PHP(文件夹)文件按字母顺序列出?

    我不确定这有多简单 但我正在使用一个显示特定文件夹中的文件的脚本 但是我希望它们按字母顺序显示 这样做会很难吗 这是我正在使用的代码 if handle opendir mainframe gt getCfg absolute path i
  • 为什么在 dll 内不调用 threadTerminate

    我有一个问题 与正常应用程序中的相同代码相比 我的 dll 中的代码的行为不同 经过一些调试后 我发现 dll 中从未调用线程的 OnTerminate type TTest class private public procedure t
  • 将 conda 包安装到 google colab

    我尝试将 anaconda 中的软件包安装到 google 的 colab 中 但这不起作用 整件事都是巫毒魔法 以下代码位于一个单元格中 笔记本的电池 wget https repo anaconda com miniconda Mini
  • 如何在 Objective C 中调用 +class 方法而不引用该类?

    我有一系列 策略 对象 我认为将它们作为一组策略类上的类方法来实现很方便 我为此指定了一个协议 并创建了符合的类 下面仅显示一个 protocol Counter NSInteger countFor Model model end int
  • 处理 JAXB 集合

    我正在尝试使用 JAXB 解组以下 XML
  • JavaQuartz 作业持久化

    我对 Java Quartz 不太熟悉 我们只是使用了每天安排的测试作业 对于我们的 Struts2 Web 应用程序 我们希望运行一些安排在一天中不同时间的日常作业 这些作业应该处于持久状态 这样即使作业由于服务器关闭 应用程序失败而失败
  • Wordpress - 使用媒体库获取图像

    我正在创建一个插件 并且有一个管理页面 在该页面的选项中 我想添加一个按钮 允许我打开 Wordpress 媒体库并从中选择图像 之后获取所选图像的 URL 和alt属性 如果可以的话 我该如何使用 AJAX 来做到这一点 首先 您需要将
  • 查询中 Group by 的奇怪行为需要优化

    谁能帮我优化这个查询 SELECT debit side account code CODE GROUP CONCAT DISTINCT accounts name AS DebitAccount GROUP CONCAT debit si
  • 水平居中时,li 被切断

    我正在尝试布局li s using flexbox 我将它们设置为列 其中 3li s在每一列中 问题是当我想要ul居中 我以ul using align content center 当我这样做并且拥有更多li s超出页面可以显示的范围
  • CodeIgniter/PHP Active Record 不会增加整数

    这是我在 CodeIgniter 的 Active Record 中的查询 function calculate invites userid this gt db gt where id userid gt update users ar
  • Flutter:[cloud_firestore/unknown] NoSuchMethodError:null 上的成员无效:“includeMetadataChanges”(Flutter Web)

    我正在尝试从 Friebase firestore 获取数据 然后将其转换为模型 我对另一个项目 Web 项目 使用了相同的代码和方法 它工作正常 但对于这个项目它不起作用 我不知道为什么 我升级了flutter版本 运行了Flutter
  • javafx中按钮颜色变化

    这是我绘制公交车座位的代码 每个Button代表在抽签中抽出的座位GridPane 我想当有人点击座位时将座位颜色从绿色更改为黄色 到目前为止我已经做到了这一点 如果我单击该按钮 它会在输出窗口中打印 hellow world 但用户界面中
  • 点安装。仅创建 dist-info 而不是包

    我正在尝试制作一个 python 包 我想使用它来安装pip install 本地 包名称列在pip freeze but import
  • 有些字形显示,有些不显示?引导程序3

    我有一个页面包含以下内容 p This one isn t appearing gt gt span class glyphicon glyphicon bed span p p But this one is gt gt span cla
  • Cloud Firestore:权限缺失或不足

    我得到 在Android上 com google firebase firestore FirebaseFirestoreException PERMISSION DENIED 权限缺失或不足 使用这些安全规则 service cloud
  • 如何强制我的 ASP.net 2.0 应用程序重新编译

    我有一个 ASP net 2 0 应用程序 我对源文件 cs 文件 进行了一些更改 我上传了更改 相信它会自动重新编译 我在 MY APP bin 中也有编译好的 dll 我检查了一下 发现它没有重新编译 请理解我对此很陌生 我的 1 方法
  • 无法按照 Docker 教程构建 docker 映像

    我正在关注这个tutorial在 Macbook 上构建示例 Docker 映像 但当我尝试运行以下命令时 docker build t getting started 我收到以下错误 Building 3 2s 15 24
  • NSManagedObject 能否符合 NSCoding

    我需要跨设备传输单个对象 现在我正在将 NSManagedObject 转换为字典 将其存档并作为 NSData 发送 收到后我将其解档 但我真的很想通过归档和取消归档来传输 NSManagedObject 本身 而不是创建中间数据对象 i