问题标签 [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 投票
1 回答
453 浏览

ios - 由于后台线程暂停延迟,将数据保存在 ApplicationDidEnterBackground 终止

我的应用程序当前从 Web 服务下载数据。接收到的数据使用后台串行队列进行处理。

当用户进入后台模式并使用 NSCoder 执行此操作时,我还想将数据保存到文件系统。根据 Apple 的建议,我在应用程序委托的 ApplicationDidEnterBackground 方法中包含了保存文件逻辑。

但是,在调用保存到文件系统之前,我无法确保数据不会发生变异,因为不会立即调用后台线程暂停。

例如,开始刷新客户端数据并返回 2000 多条记录(简单数据方案)。但是,在运行时,用户按下 Home 按钮,应用程序进入后台并尝试将数据保存到文件系统。

在后台线程的块处理中,我已经包含了当客户端添加到数组时记录的逻辑,以及包含 NSLog 消息来告诉我何时调用 ApplicationDidEnterBackground 方法。以下是日志记录结果的相关部分:

从日志中可以看出,后台线程块处理在ApplicationDidEnterBackground被调用后(事实上,甚至在异常被调用后)仍然继续处理记录,导致由于数组变异导致文件保存失败。

有没有人对如何最好地处理确保仅在后台队列暂停后保存文件有任何建议?如果可能的话,我宁愿不取消线程处理。提前致谢。

0 投票
1 回答
366 浏览

objective-c - 检索数据时 NSKeyedUnarchiver unarchiveObjectWithFile decodeBytesForKey EXC_BAD_ACCESS code=1

我需要一些关于使用 NSKeyedUnarchiver unarchiveObjectWithFile decodeBytesForKey 的帮助。我似乎正确地编写了所有内容,但读取数据给了我一个 EXC_BAD_ACCESS 错误。我正在尝试反序列化数据,并且对那里的各种答案和示例感到困惑。有人可以指出我做错了什么吗?

如果我注释掉数据的编码器和解码器行,我会为其他所有内容返回正确的值,但我也需要数据。

0 投票
3 回答
1064 浏览

swift - 简单的 Swift 类无法编译

我的简单类 ClassWithOneArray 产生了这个错误:

Bitcast 要求两个操作数都是指针,或者两者都不是 %19 = bitcast i64 %18 to %objc_object*, !dbg !470 LLVM ERROR: Broken function found, 编译中止!命令 /Applications/Xcode6-Beta.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/swift 失败,退出代码为 1

但是,我的班级 ClassWithOneInt 没有。为什么?

0 投票
1 回答
119 浏览

ipad - 在 iOS7 中使用 Bezierpath 绘制虚线时出现 EXC_ARM_DA_ALIGN 异常

我正在使用贝塞尔路径对象来绘制线条和虚线。我将这些路径保存在一个文件中,并使用 NScoder 来保存这些路径它在 iOS 6 设备和 iOS 7 模拟器中工作正常,但在 iOS 7 设备中为虚线而不是纯线抛出 EXC_ARM_DA_ALIGN 错误。

虚线在绘制时工作正常,但是当我导航回上一页并再次进入绘图视图时,它当时崩溃了。我调试了代码,发现它在解码“Line_Point.m”文件的解码器方法中的虚线时崩溃

//持久化路径

// 画线:

在 CanvasViewDirectionalLines.m

在 Drawrect 中:

我已经尝试解决这个问题 3 天了。请帮我

0 投票
1 回答
193 浏览

ios - CALayer 值未应用于 UIControl

工作场所

UIViewUILabel和创建一个UIButton。在这里,我设置了UIButton以下图层属性:

现在我将这个自定义视图保存到文件中NSCoding并使用它加载。此控件显示在 中UITableViewCell

问题

自定义视图的所有细节,如UILable标题、大小、背景颜色等。UIButton从文件中检索到的也是如此。但是CALayer我设置的相关细节UIButton没有被检索到。

保存到文件之前:

在此处输入图像描述

从文件中获取后:

在此处输入图像描述

所以我不清楚CALayer属性是用UIButton对象管理的。

这些细节(CALAyer值)是否仅在运行时可见?或者我错过了什么?

如果您不清楚问题,请添加评论。

编辑:

以前我没有提供更多信息来降低问题的复杂性。下面是我的实现的完整层次结构。

NSObject --> 自定义视图 --> UIButton --> CALayer

1)第一NSObject类是一个bean类。其中包含一些变量(我称之为属性)。此属性是自定义视图的元详细信息。There is one variable "parentView" is use to store Custom view.

2)自定义视图:这是UIView包含UILabelUIButton

现在 bean 类对象(属性)存储在文件中并重试。这样我就可以使用变量parentView来加载自定义视图。

根据有关UIButton嵌入在该自定义视图中的问题。

0 投票
1 回答
494 浏览

objective-c - NSCoder 不能与 NSArray 一起使用

我正在尝试为我创建的具有自定义对象子数组的自定义对象实现 NSCoder 方法 encodeWithCoder 和 initWithCoder 。两个自定义对象都使用上述方法,但在顶级对象被解码后,数组的值始终为 nil。

这两个对象都实现了以下方法,字典和数组,或者从我拥有的用于获取字段名称并将对象转换为字典的库中流行的方法。我检查了在数组上调用了 encodeObject ,此时数组不是零。我同样检查了解码方法在另一边收到 nil ..

我无法弄清楚我哪里出错了?我是否正确假设只要子数组对象实现协议我应该可以这样做吗?

0 投票
1 回答
279 浏览

ios - 使用 SpriteKit 和 iOS 7 保存高分

我正在创建一个需要存储多个不同级别的高分的应用程序。我正在使用http://www.raywenderlich.com/63235/how-to-save-your-game-data-tutorial-part-1-of-2上的优秀教程作为我的基础试图做。根据他们的建议,我使用了来自https://gist.github.com/dhoerl/1170641的 keychainwrapper

在我的 Xcode 外的 iOS sim 中,游戏状态保存工作得非常好,我可以关闭 Xcode,甚至重新启动我的 mac,高分就会显示出来。但是当我使用我的 iPhone 5 作为目的地时,它根本不起作用。如果我杀死该应用程序,高分就会消失。不确定我在这笔交易中缺少什么。

这是我的gameState.h:

这是我的gameState.m

在每个级别中我跟踪分数,然后当用户输掉游戏时,我使用以下行来更新高分,然后进入 Game Over 场景:

最后,在 Game Over 中,我使用

保存高分。

在此先感谢您的帮助,任何方向都会很棒。如果您需要更多信息,请告诉我!

0 投票
2 回答
3876 浏览

ios - 在所需的 init(coder aDecoder: NSCoder) 中从 NSCoder 获取属性

我正在Swift 中实现一个Circle类(的子类),它根据传入的框架在其初始化程序中设置它,如下所示:UIViewradiusinit(frame: CGRect)

我还想确保从 Interface Builder 实例化圆的情况,所以我还实现了'required init(coder aDecoder: NSCoder)`(无论如何我都被 Xcode 强制执行)。

如何检索frame以某种方式包含在aDecoder. 我想要实现的基本上是这样的:

0 投票
3 回答
18686 浏览

swift - 如何在 swift 中使用 NSCoder 对枚举进行编码?

背景

我正在尝试使用 NSCoding 协议对字符串样式的枚举进行编码,但是在与 String 之间进行转换时遇到了错误。

解码和编码时出现以下错误:

字符串不能转换为 Stage

额外参数 ForKey:在调用中

代码

0 投票
1 回答
349 浏览

xcode - iOS 模拟器是否会在每次重启时清除 NSCoder 编写的环境?

在 XCode 中使用 NSCoder 保存和加载时,我似乎无法保存应用程序状态并将其加载回来。

我想要完成的是保存应用程序状态,然后每次重新启动时重新加载它。 本质上,继续我离开的地方。

ios模拟器每次都会把环境擦干净吗?

如果是这样,有什么办法可以解决这种行为?