问题标签 [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.
properties - 如何基于 NSString 类型键测试属性存在和类型?
在我的 iOS 项目中更新 Core Data 模型的过程中,我在服务器上查询 JSON 对象,这些对象在某种程度上与我的模型的托管实体相对应。我努力的最终结果是来自 JSON 输出的可靠更新解决方案。
对于这个问题中的示例,我将命名核心数据托管对象existingObj
和传入的 JSON 反序列化字典updateDict
。棘手的部分是处理这些事实:
- 并非所有属性
existingObj
都存在于updateDict
- 并非 的所有属性
updateDict
都在extistingObj
. - 并非所有类型的
existingObj
's 属性都与 JSON 反序列化属性匹配。(某些字符串可能需要自定义的 Objective-C 包装器)。 updateDict
可能包含未初始化 (nil
) 中的键的值existingObj
。
这意味着在迭代更新的字典时,必须来回对属性进行一些测试。首先我要测试 的属性是否updateDict
存在existingObj
,然后我使用 KVC 设置值,如下所示:
尽管这部分有效,但我不喜欢我实际上是在测试displayName
作为 getter 的事实,而我即将调用setDisplayName:
setter(间接通过 KVC)。我宁愿是 [existingObj hasWritablePropertyWithName :key] 之类的东西,但是我找不到这样做的东西。
这就产生了子问题 A:如果您只有属性的名称,如何测试属性设置器?
下一部分是我想根据它们的类型自动识别属性的地方。如果updateDict
和existingObj
都有一个用于键 @"displayName" 的 NSString,那么设置新值很容易。但是,如果updateDict
包含键 @"color" 的 NSString,即 @"niceShadeOfGreen",我想将其转换为正确的 UIColor 实例。但是如何测试接收属性的类型,existingObj
以便知道何时转换值以及何时简单地分配?我希望有一些类似于typeOfSelector 的东西:
当然这是伪代码。我不能依赖测试existingObj
-property 值的类型,因为它可能是未初始化的或nil
.
子问题 B:如果您只有属性的名称,如何测试属性的类型?
我想就是这样。我想这一定是这里已经存在的东西的欺骗,但我找不到它。也许你们可以?
干杯,EP。
PS 如果您有更好的方法将自定义的 Objective-C 对象同步到反序列化的 JSON 对象,请分享!最后,结果才是最重要的。
cocoa - 核心数据延迟加载问题
Core Data 延迟加载对象,它应该在您尝试引用它们时立即引入任何对象。但是我遇到了这个方案的几个问题。
Objective C 2.0 对关系(集合)中对象的快速枚举可能会失败(因为集合中的对象尚未加载),并且在触及由核心数据管理的对象的成员之前不会调用 awakeFromFetch。
例如,如果我在 NSManagedObject 的子类中有关系,例如:
在获取该对象的实例后,如果我尝试使用快速枚举,例如:
循环体永远不会执行。在调试器中,您可以看到剪辑集(运行时的 _NSFaultingMutableSet 实例)最初是空的。
或者说我有一个从持久状态派生的剪辑对象的非持久成员:
我将其与 using awakeFromFetch 方法同步,但直到第一次调用对象的某个持久成员后才会调用 awakeFromFetch,因此如果某些代码在加载对象之前尝试访问此非持久值,则尚未定义(即为零)。
在获取请求上使用 setReturnsObjectsAsFaults: 方法似乎没有帮助。它似乎不会强制获取附加到所获取对象的所有对象树。
确保在使用对象之前加载对象的最佳方法是什么?为什么快速枚举无法导致对象集加载?
ios - iOS中的任何内存泄漏都被接受了吗?
我是 Objective-C 的新手(来自 Java),我认为我对内存管理有了很好的理解。但是当我的应用程序加载时,我得到一个非常小的内存泄漏,这只发生在游戏加载时(我们谈论的是 32 到大约 512 个字节)。
泄漏的时候是随机的,而且似乎不是用户触发了泄漏。通常它在大约 20 秒到 1 分钟后被检测到。
我从调试器获得的信息永远不会相同。有时它是“负责框架”的 UIApplication,有时是 [UIWindow makeKeyAndVisible],有时是 [UNIbDecoder]。
这是低于“可接受”的限制,还是应用程序根本不应该泄漏?这是我的第一个“大”应用程序。我做了一个小的翻转视图应用程序,并且没有任何泄漏。
另一方面,识别泄漏的最佳方法是什么?
ipad - 单例类和 sqlite 的使用
我是 Objective-c 的新手,我一直在阅读单例课程。我想将它实现到我的逻辑中,但我不确定它是否正确/可能/可行,任何建议将不胜感激。
目前我正在从 xml 提要加载数据,但我想根据单击的按钮控制应显示哪些数据。例如,buttonA 将显示 IT 新闻,而 buttonB 将显示名人新闻。
我的想法是在后台应用程序启动时将 xml 数据加载到 sqlite 中,并使用单例类同时显示我的按钮视图。如果用户按下按钮,它将查询所需的表并将内容显示到 tableView 中。
这可行吗?如果没有,您能否告知解决此问题的最佳方法是什么?
谢谢你。
iphone - Interface Builder 问题(在 xCode 中构建并运行)
我真的不明白这个。我下载了最新版本的 xCode 3.2.5 和 Interface Builder 3.2.5。我遵循以下步骤:
创建:基于窗口的应用程序 (iPhone) 双击:MainWindow.xib -- 启动界面生成器 -- 选择 -> 文件 -> 在 XCode 中构建和执行
我在界面生成器中收到以下错误:
“Interface Builder 无法构建并进入 Xcode。构建失败(1 个错误)”
但是 Xcode 中没有构建错误。我不太明白发生了什么,因为我是这个平台的新手。有人可以帮忙吗?
cocoa - 我会感谢对新 Cocoa 程序员的帮助
我正在为设计游戏的女儿制作一个简单的程序。我只是想让 Mac 提供一个从 1 到 6 的随机数,将其与用户的猜测进行比较,然后得到用于确定玩家在棋盘游戏中可以移动多少空间的差值。一切正常,除了程序生成的差异始终为 3。它正确生成随机数并正确读取用户的输入。这是代码。我真的很感激帮助。我对此很陌生,并意识到可能有一个非常简单的答案。我已经搜索和搜索并没有提出解决方案。在某一时刻,它正确地产生了差异,但现在不是。非常感谢!
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!:)
iphone - 所以“la脚” - 如何从float = 0.39824702获得float = 0.398?
..所以“.”后面只有 3 位数字..
由于通过蓝牙传输数字,我希望仅在内存中有 0.987 ..
我正在使用 iphone SDK ..
谢谢你... :)
objective-c-2.0 - 如何获得随机数字+1或-1(只需要它用于“+”或“-”)
我需要随机数,但只有 +1 或 -1(在 box2d 中定义力方向)如何获得这两个随机数?谢谢你!
iphone - 如何将第二个视图添加为标签栏视图(iPhone SDK)
因此,在我设法使用 TabBarViewControllers 并使用它们创建应用程序之前。但是,每次我这样做时,视图都会作为我的主要视图。这一次,我希望我的 TabBarView 成为我的应用程序中的第二个视图
例如
第一个窗口有一堆按钮,当我单击其中一个按钮时,我希望显示第二个视图。这个视图包括一个 TabBarViewController。
我得到的最远的是让按钮显示一个视图,但由于某种原因它不会显示我的 TabBar 视图!
这是我的按钮的代码
}
有大佬能帮忙吗?