问题标签 [nscoder]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
310 浏览

objective-c - ColorWell for Colored "Category"

I have an NSTextField, an NSTableView with a column "category", an NSColorWell, and a custom array controller.

The NSTextField and the column "category" from the NSTextField are bound to the array controller so that everything I write in the text field shows up in this column.

The problem I have is the following:

I want the the string in the "category" column to get the color of the NSColorWell when the user chooses a color. All that works fine, but when I open the app a second time and I create a second entry, then the color of the string in the "category" column goes back to the first color it had before the user chose a color.

The way I'm trying this at the moment:

AppDelegate.h :

AppDelegate.m :

ToDoItem.h :

ToDoItem.m :

I hope my code will help you to understand my problem and to get this working.

I look forward to hearing from you. Thanks.

0 投票
2 回答
1782 浏览

objective-c - 解压缩使用 encodeRootObject: 归档的内容的正确方法是什么?

我第一次尝试使用 Keyed Archiver 类,但在这个简单的测试(OCUnit)中我的最后一个断言失败了:

我已经确认存档器正在存档,我假设问题存在于取消存档中。根据存档和序列化指南,我认为我使用 Unarchiver 的方式可能存在一些问题?

谢谢!

0 投票
2 回答
2945 浏览

iphone - 如何将 NSMutableArray(包含其他数组)保存到文件

以前有人问过这个问题,人们就如何做到这一点给出了很好的指导,例如这里

但是,我想知道如果我只是想将一个 NSMutableArray(包含另一个 NSMutableArray 的各种实例)保存到文件中,是否真的需要使用 NSCoder?我试过了,但只收到一条错误消息:

我的错误信息:

所以我想我必须使用 NSCoder,对吧?如果是这样,我想知道如何去做。人们已经解释了如何用一个类来做到这一点,但就我而言,我有一个 NSMutableArray (myLibrary),它包含一个类的各种实例。我必须在这个类和 NSMutableArray 中实现 NSCoder 吗?

我像这样分配我的图书馆:

然后像这样添加一个名为 NoteBook.m 的类的实例:

那么我到底应该把 NSCoder 命令放在哪里呢?只进入我的 NoteBook.m 课程?这会自动处理 myLibrary 吗?

感谢您的任何建议。


编辑:

所以我更新了我的代码,但我想最大的问题是我的 NSMutableArray myLibrary 包含我设置的自定义类的几个实例(称为笔记本)。我已经为这个类(及其所有变量)设置了 NSCoding,以便我可以保存并加载它。

现在,如果我在应用程序中创建 NSMutableArray(即当应用程序第一次启动时,不存在文件),而不是从磁盘加载它,我的应用程序可以正常工作:

如果我从磁盘加载它,它也可以正常工作:

如果我在加载后记录库中包含的所有内容,那么一切都很好。例如,以下工作完全正常:

然而,最大的问题是,如果任何其他方法试图访问 myLibrary。例如,如果我从另一个方法调用相同的日志命令,应用程序将崩溃并且我收到以下错误消息:

这听起来好像 myLibrary 以某种方式被释放了,但我不明白为什么。这怎么可能发生?我觉得我在我的 NSCoding 设置中做错了什么......因为如果我只是在代码中创建 myLibrary,那么一切都会非常好。只有当我从磁盘加载它时,应用程序才会崩溃。


这是班级设置:


编辑:

我想我已经解决了......我忘记了一个小“自我”......这一切都搞砸了并释放了 myLibrary:

0 投票
2 回答
1524 浏览

iphone - NSUserDefaults、NSCoder、自定义类 - iPhone 应用问题

我有一个错误,我想我在下面的过程中做错了什么。首先,我有一个班级联系人:

在 Contact 的实现中,我有:

当我在我的应用程序中创建我所谓的“组”时,我会执行以下操作:

根据我所做的一些打印声明,这似乎工作正常。

然后,当应用程序启动时,我尝试打印我存储的那些对象:

但是,在 NSLog(@"got contact %@",c); 行上,我的程序停止运行。它打印一切都很好,甚至打印出对象的类是“联系人”。但随后它停止了。看起来可能有错误,但在左侧,我只在左侧错误区域的 XCode 4 中的“按线程”选项下看到问号。

那么我做错了什么?

在此处输入图像描述

0 投票
1 回答
337 浏览

c# - 在 C#/.NET 中从 Apple/Objective-C 读取持久数据

是否有C#/.NET 库或其他现有代码可以从 Apple 的序列化 API 读取持久数据,即NSKeyedArchiver, NSKeyedUnarchiver, NSCoder

背景:我的一个朋友为一些 Apple 设备创建了一个很酷的应用程序。我有一个适用于 Microsoft 世界的类似应用程序,并且想导入他的文档。数据位于包含所有必要内容的单个文件中。该文件是使用上述 Apple API 创建的。

在 C# 中读取 Apple 数据的最简单方法是什么?

谢谢,马塞尔

0 投票
2 回答
337 浏览

objective-c - Objective-C struct 属性指针不能通过 self.prop 生成?

在将 NSCoder 支持写入一个类时,我刚刚遇到了一个小惊喜。我有一个 A 类,其中包含 rgb 结构类型的公开“颜色”属性。我有另一个扩展 A 的 B 类。

为了在 B 类的 encodeWithCoder 方法中对颜色属性进行编码,我首先将它包装到一个 NSValue 中,如下所示:

但是,使用此代码会导致以下编译错误:

在使用 NSValue 包装之前,只需将 self.color 复制到方法范围值就很容易解决,但我想了解何时发生这种情况的规则,以及发生这种情况的原因。由于不需要该属性名称的真实类字段存在,因此任何@synthesize 属性都会发生这种情况,因此没有保证指向的对象?

0 投票
3 回答
1057 浏览

objective-c - NSCoder 和/或 NSKeyedUnarchiver 如何处理同一对象的多个解码?

我想知道NSCoder下次解码时如何处理由多个对象共享和编码的对象。它会复制该对象的两个副本,还是将一个对象解码并在解码它的所有其他对象之间共享?

我在下面提供了一个类似这种情况的小例子。

例子:

  1. 应用程序启动
  2. 对象 A 和对象 B 将对象 C 设置为它们的委托
  3. 应用程序收到终止通知。
  4. 对象 A 和对象 B对它们自己和它们的所有对象(包括它们的委托)进行编码
  5. 应用程序关闭并重新启动
  6. 对象 A 和对象 B解码自己和它们的所有对象(包括它们的委托)

在第 6 步之后,对象 A 和对象 B 会共享相同的解码对象,还是它们各自拥有自己的副本?

0 投票
4 回答
3871 浏览

iphone - 取消引用 NSCoder 的 decodeBytesForKey 返回的指针时,iOS 设备崩溃

在使用 Apple LLVM Compiler 3.0 并使用 -O3 编译时,我发现了一个不寻常的 NSCoder 崩溃程序。它只会在设备上崩溃。我测试了运行 iOS 5 的 iPhone 4、运行 iOS 5 的 iPad 2 和运行 iOS 4 的 iPad 1。所有崩溃都相同。这是代码的相关部分:

BBPointI32 是这样的:

取消引用EXC_BAD_ACCESS时会发生这种情况。data不是空指针问题。如果我附加 GDB,我可以看到长度为 8,sizeof(BBPointI) 也是 8,并且数据是正确的。

如果我查看反汇编,崩溃发生在:

看起来不错。r0 包含 0xb546e,即data. 当我检查该内存时,我可以看到它包含我期望的数据。对于任何感兴趣的人,r2 包含 72(不确定那是什么),而 r3 包含 8(很可能是 的值length)。

任何人都可以对这个问题有所了解吗?

0 投票
1 回答
815 浏览

iphone - 如何初始化具有 initWithCoder: 方法的视图

我有一个用以下方式初始化的视图 -(id)initWithCoder:(NSCoder *)aDecoder 如何在 中初始化此视图viewController

我想viewController如果我想autoRotate使用设备查看视图,我需要。我不确定,也许我可以在autoRotation没有viewController?

向视图添加观察者shouldAutorotateToInterfaceOrientation:并不会自动旋转视图。但是当我也添加

我在控制台窗口中获得了方向值。

任何帮助将不胜感激。

0 投票
2 回答
612 浏览

objective-c - 当子类化 NSCoder 时,我是否还需要子类化集合类(即:NSArray、NSDictionary)?

我正在探索子类化NSCoder以读取/写入专有文件格式的想法。我开始相信这可能还需要我进行子类化NSArrayNSDictionary覆盖encodeWithCoder:以确保它们被正确编码:

我不愿意这样做,因为NSCoder它的相关协议NSCoding应该是自给自足的......要求遵循协议的子类化似乎是糟糕的设计。我是误会还是想多了?!?

详细说明:
例如,如果文件格式规定项目列表编码如下:

我想要编码一个数组,它encodeWithCoder:需要看起来像这样:

因为我忽略了 NSArray 的encodeWithCoder:实现方式,所以我想我必须重写它才能正确使用我的 NSCoder 类。