问题标签 [objective-c-2.0]

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 回答
8101 浏览

properties - 如何基于 NSString 类型键测试属性存在和类型?

在我的 iOS 项目中更新 Core Data 模型的过程中,我在服务器上查询 JSON 对象,这些对象在某种程度上与我的模型的托管实体相对应。我努力的最终结果是来自 JSON 输出的可靠更新解决方案。

对于这个问题中的示例,我将命名核心数据托管对象existingObj和传入的 JSON 反序列化字典updateDict。棘手的部分是处理这些事实:

  1. 并非所有属性existingObj都存在于updateDict
  2. 并非 的所有属性updateDict都在extistingObj.
  3. 并非所有类型的existingObj's 属性都与 JSON 反序列化属性匹配。(某些字符串可能需要自定义的 Objective-C 包装器)。
  4. updateDict可能包含未初始化 ( nil) 中的键的值existingObj

这意味着在迭代更新的字典时,必须来回对属性进行一些测试。首先我要测试 的属性是否updateDict存在existingObj,然后我使用 KVC 设置值,如下所示:

尽管这部分有效,但我不喜欢我实际上是在测试displayName作为 getter 的事实,而我即将调用setDisplayName:setter(间接通过 KVC)。我宁愿是 [existingObj hasWritablePropertyWithName :key] 之类的东西,但是我找不到这样做的东西。

这就产生了子问题 A:如果您只有属性的名称,如何测试属性设置器?

下一部分是我想根据它们的类型自动识别属性的地方。如果updateDictexistingObj都有一个用于键 @"displayName" 的 NSString,那么设置新值很容易。但是,如果updateDict包含键 @"color" 的 NSString,即 @"niceShadeOfGreen",我想将其转换为正确的 UIColor 实例。但是如何测试接收属性的类型,existingObj以便知道何时转换值以及何时简单地分配?我希望有一些类似于typeOfSelector 的东西:

当然这是伪代码。我不能依赖测试existingObj-property 值的类型,因为它可能是未初始化的或nil.

子问题 B:如果您只有属性的名称,如何测试属性的类型?

我想就是这样。我想这一定是这里已经存在的东西的欺骗,但我找不到它。也许你们可以?
干杯,EP。

PS 如果您有更好的方法将自定义的 Objective-C 对象同步到反序列化的 JSON 对象,请分享!最后,结果才是最重要的。

0 投票
4 回答
1728 浏览

cocoa - 核心数据延迟加载问题

Core Data 延迟加载对象,它应该在您尝试引用它们时立即引入任何对象。但是我遇到了这个方案的几个问题。

Objective C 2.0 对关系(集合)中对象的快速枚举可能会失败(因为集合中的对象尚未加载),并且在触及由核心数据管理的对象的成员之前不会调用 awakeFromFetch。

例如,如果我在 NSManagedObject 的子类中有关系,例如:

在获取该对象的实例后,如果我尝试使用快速枚举,例如:

循环体永远不会执行。在调试器中,您可以看到剪辑集(运行时的 _NSFaultingMutableSet 实例)最初是空的。

或者说我有一个从持久状态派生的剪辑对象的非持久成员:

我将其与 using awakeFromFetch 方法同步,但直到第一次调用对象的某个持久成员后才会调用 awakeFromFetch,因此如果某些代码在加载对象之前尝试访问此非持久值,则尚未定义(即为零)。

在获取请求上使用 setReturnsObjectsAsFaults: 方法似乎没有帮助。它似乎不会强制获取附加到所获取对象的所有对象树。

确保在使用对象之前加载对象的最佳方法是什么?为什么快速枚举无法导致对象集加载?

0 投票
2 回答
3901 浏览

ios - iOS中的任何内存泄漏都被接受了吗?

我是 Objective-C 的新手(来自 Java),我认为我对内存管理有了很好的理解。但是当我的应用程序加载时,我得到一个非常小的内存泄漏,这只发生在游戏加载时(我们谈论的是 32 到大约 512 个字节)。

泄漏的时候是随机的,而且似乎不是用户触发了泄漏。通常它在大约 20 秒到 1 分钟后被检测到。

我从调试器获得的信息永远不会相同。有时它是“负责框架”的 UIApplication,有时是 [UIWindow makeKeyAndVisible],有时是 [UNIbDecoder]。

这是低于“可接受”的限制,还是应用程序根本不应该泄漏?这是我的第一个“大”应用程序。我做了一个小的翻转视图应用程序,并且没有任何泄漏。

另一方面,识别泄漏的最佳方法是什么?

0 投票
1 回答
464 浏览

ipad - 单例类和 sqlite 的使用

我是 Objective-c 的新手,我一直在阅读单例课程。我想将它实现到我的逻辑中,但我不确定它是否正确/可能/可行,任何建议将不胜感激。

目前我正在从 xml 提要加载数据,但我想根据单击的按钮控制应显示哪些数据。例如,buttonA 将显示 IT 新闻,而 buttonB 将显示名人新闻。

我的想法是在后台应用程序启动时将 xml 数据加载到 sqlite 中,并使用单例类同时显示我的按钮视图。如果用户按下按钮,它将查询所需的表并将内容显示到 tableView 中。

这可行吗?如果没有,您能否告知解决此问题的最佳方法是什么?

谢谢你。

0 投票
3 回答
385 浏览

iphone - Interface Builder 问题(在 xCode 中构建并运行)

我真的不明白这个。我下载了最新版本的 xCode 3.2.5 和 Interface Builder 3.2.5。我遵循以下步骤:

创建:基于窗口的应用程序 (iPhone) 双击:MainWindow.xib -- 启动界面生成器 -- 选择 -> 文件 -> 在 XCode 中构建和执行

我在界面生成器中收到以下错误:

“Interface Builder 无法构建并进入 Xcode。构建失败(1 个错误)”

但是 Xcode 中没有构建错误。我不太明白发生了什么,因为我是这个平台的新手。有人可以帮忙吗?

0 投票
2 回答
78 浏览

cocoa - 我会感谢对新 Cocoa 程序员的帮助

我正在为设计游戏的女儿制作一个简单的程序。我只是想让 Mac 提供一个从 1 到 6 的随机数,将其与用户的猜测进行比较,然后得到用于确定玩家在棋盘游戏中可以移动多少空间的差值。一切正常,除了程序生成的差异始终为 3。它正确生成随机数并正确读取用户的输入。这是代码。我真的很感激帮助。我对此很陌生,并意识到可能有一个非常简单的答案。我已经搜索和搜索并没有提出解决方案。在某一时刻,它正确地产生了差异,但现在不是。非常感谢!

0 投票
1 回答
13484 浏览

objective-c-2.0 - NSLog(@"%d", a) NSLog(@"%g", a); @"%d" 和 @"%g" 之间的区别

嗨,我做了一个非常简单的程序来解释我的问题:这个程序的输出是:

第一行:一些随机数(394883904,或 89374e-15 或 ...)第二行:12.3454323

所以..我的问题:什么是@"%d",什么是@"%g").. 因为,IF a 是 INTEGER (int a = 156)

然后 @"%d" 给出 156 但 @"%g" 给出 8.32059e-315 或类似的:)

我正在对这些值进行蓝牙传输,但这是我发送整数位置然后显示它的问题,它正在工作,但我必须检查什么是什么,所以,有什么关于 @"% 的教训d" 和类似的工作人员?何时使用@"%d" 和何时使用@"%g".. 还有其他@"%something" 吗?谢谢你

编辑:当然,零线是hello world!:)

0 投票
3 回答
636 浏览

iphone - 所以“la脚” - 如何从float = 0.39824702获得float = 0.398?

..所以“.”后面只有 3 位数字..

由于通过蓝牙传输数字,我希望仅在内存中有 0.987 ..

我正在使用 iphone SDK ..

谢谢你... :)

0 投票
3 回答
244 浏览

objective-c-2.0 - 如何获得随机数字+1或-1(只需要它用于“+”或“-”)

我需要随机数,但只有 +1 或 -1(在 box2d 中定义力方向)如何获得这两个随机数?谢谢你!

0 投票
2 回答
385 浏览

iphone - 如何将第二个视图添加为标签栏视图(iPhone SDK)

因此,在我设法使用 TabBarViewControllers 并使用它们创建应用程序之前。但是,每次我这样做时,视图都会作为我的主要视图。这一次,我希望我的 TabBarView 成为我的应用程序中的第二个视图

例如

第一个窗口有一堆按钮,当我单击其中一个按钮时,我希望显示第二个视图。这个视图包括一个 TabBarViewController。

我得到的最远的是让按钮显示一个视图,但由于某种原因它不会显示我的 TabBar 视图!

这是我的按钮的代码

}

有大佬能帮忙吗?