问题标签 [cocoa]

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 投票
2 回答
546 浏览

objective-c - 如何判断用户是否使用 Cocoa 使用 24 小时时间

我正在尝试确定用户使用的是 24 小时还是 12 小时时间,除了创建 NSDateFormatter 并搜索句点字段的格式字符串('a ' 特点)

这就是我现在正在做的事情:

哪个有效,但感觉有点脆弱。必须有更好的方法,对吧?

0 投票
6 回答
2340 浏览

cocoa - 未在文件内容中进行替换的 Xcode 项目模板的具体帮助

我们正在尝试制作一个项目模板,但是这方面的文档参差不齐或根本不存在。

对一些模板文件进行逆向工程,我们得出以下结论。然而,它实际上并不起作用!

首先,我们已经弄清楚应该在里面安装项目模板:

~/Library/Application Support/Developer/Shared/Xcode/Project Templates

我们已经制作了项目并将其安装在这里,这部分工作 - 我们看到它出现在 Xcode“新项目”选择器的“用户模板”部分。

项目文件夹包含以下文件。如您所见,我希望替换文件名(该部分有效),但正如您将看到的,我还希望替换文件的内容;这不会发生。

  • ___项目名称___.xcodeproj
  • ___PROJECTNAMEASIDENTIFIER____Prefix.pch
  • ___PROJECTNAMEASIDENTIFIER___.icns
  • ___PROJECTNAMEASIDENTIFIER___Delegate.h
  • ___PROJECTNAMEASIDENTIFIER___Delegate.m
  • ___PROJECTNAMEASIDENTIFIER___Template.html
  • 调试.xcconfig
  • en.lproj
  • 信息列表
  • 发布.xcconfig

我在 ___PROJECTNAME___.xcodeproj 包中放入了两个特殊文件:

  • 模板信息.plist
  • TemplateIcon.icns - 新项目窗口中显示的图标

如果我使用这个模板创建一个新项目(称为“Foo & Bar”作为压力测试),这些是它创建的文件:

  • 调试.xcconfig
  • en.lproj
  • Foo & Bar.xcodeproj
  • Foo___Bar_Prefix.pch
  • Foo___Bar.icns
  • Foo___BarDelegate.h
  • Foo___BarDelegate.m
  • Foo___BarTemplate.html
  • 信息列表
  • 发布.xcconfig

到目前为止,一切都很好!

但是查看文件内容,我得到了这样的东西。这是 Foo___BarDelegate.m 的内容:

明显的问题是我在某种程度上做错了 TemplateInfo.plist。但是话又说回来,请注意不仅我的特殊物品没有被替换,而且标准物品甚至没有被替换!所以也许这是一个更深层次的问题。

但是,有问题的 TemplateInfo.plist 是我最好的假设,我提出了一些我尝试过的变体。都不工作。

任何一个:

或者:

更新:我也尝试添加“FilesToRename”键,即使 ___ 似乎会自动导致重命名发生。这是 XML 格式的 plist 内容(因为有些人担心事物的 UTF-8 特性——是的,它是一个有效的 plist):

0 投票
13 回答
41921 浏览

objective-c - 解决 Objective-C 命名空间冲突的最佳方法是什么?

Objective-C 没有命名空间;它很像 C,一切都在一个全局命名空间中。通常的做法是在类前面加上首字母,例如,如果你在 IBM 工作,你可以在它们前面加上“IBM”;如果你为微软工作,你可以使用“MS”;等等。有时缩写是指项目,例如 Adium 为类加上“AI”前缀(因为它背后没有公司,你可以使用缩写)。Apple 用 NS 为类添加前缀,并表示此前缀仅供 Apple 使用。

到目前为止一切顺利。但是在前面的类名后面附加 2 到 4 个字母是一个非常非常有限的命名空间。例如,MS 或 AI 可能具有完全不同的含义(例如 AI 可能是人工智能),其他一些开发人员可能决定使用它们并创建一个同名的类。Bang,命名空间冲突。

好的,如果这是您自己的一个类和您正在使用的外部框架之一之间的冲突,您可以轻松更改类的命名,没什么大不了的。但是,如果您使用两个外部框架,这两个框架您都没有源代码并且无法更改,该怎么办?您的应用程序与它们都链接,并且您会遇到名称冲突。你将如何解决这些问题?以您仍然可以使用这两个类的方式解决它们的最佳方法是什么?

在 C 中,您可以通过不直接链接到库来解决这些问题,而是在运行时使用 dlopen() 加载库,然后使用 dlsym() 找到您要查找的符号并将其分配给全局符号(您可以以任何你喜欢的方式命名),然后通过这个全局符号访问它。例如,如果您因为某个 C 库有一个名为 open() 的函数而发生冲突,您可以定义一个名为 myOpen 的变量并让它指向该库的 open() 函数,因此当您想使用系统 open() ,您只需使用 open() ,当您想使用另一个时,您可以通过 myOpen 标识符访问它。

在 Objective-C 中是否有类似的可能,如果没有,是否有任何其他聪明、棘手的解决方案可以用来解决命名空间冲突?有任何想法吗?


更新:

只是为了澄清这一点:当然欢迎建议如何提前避免命名空间冲突或如何创建更好的命名空间的答案;但是,我不会接受它们作为答案,因为它们不能解决我的问题。我有两个库,它们的类名发生冲突。我无法改变它们;我没有任何一个的来源。碰撞已经存在,关于如何提前避免碰撞的提示将不再有帮助。我可以将它们转发给这些框架的开发人员,并希望他们将来选择更好的命名空间,但目前我正在寻找一种解决方案,以便现在在单个应用程序中使用这些框架。有什么解决方案可以使这成为可能吗?

0 投票
5 回答
19911 浏览

objective-c - NSMutableArray 销毁

NSMutableArray我有一个包含快乐对象的数组。每当我尝试清除所有对象的数组并重新填充它时,这些对象就会恶意地打开(泄漏)我。

它像这样在init函数中分配

我用来清除它的不同方法包括:

显式分配和释放数组也不起作用。仅当我尝试重置列表时才会发生泄漏。

重置时我错过了一步还是这是一个不同的问题?

0 投票
23 回答
68119 浏览

c - 先学C再学Objective-C

作为一名有抱负的 Apple 开发人员,我想获得社区的意见,如果在进入 Objective-C 并最终进入 Cocoa 框架之前先学习 C 会更好吗?

我的直觉说学习 C,这将为我打下良好的基础。

0 投票
4 回答
43829 浏览

objective-c - 如何创建 NSIndexPath:indexPathWithIndexes:length 所需的“索引”:

创建具有一个或多个节点的索引路径的类方法是:

我们如何创建第一个参数中所需的“索引”?

文档将其列为索引数组以构成索引路径,但它需要一个 (NSUinteger *)。

要创建 1.2.3.4 的索引路径,是否只是 [1,2,3,4] 的数组?

0 投票
6 回答
7100 浏览

cocoa - 有没有更好的方法来找到明天的午夜?

有一个更好的方法吗?

请注意,我总是想要下一个午夜,即使我拨打电话时恰好是午夜,但是如果恰好是 23:59:59,我当然想要一秒钟后即将到来的午夜。

自然语言函数看起来很不稳定,如果我在“day”字段中超过 32,我不确定 Cocoa 会做什么。(如果可行,我可以放弃 [now dateByAddingYears:...] 电话)

0 投票
2 回答
2471 浏览

cocoa - 如何更改 NSProgressIndicator 的高度?

默认情况下,cocoa 进度条有点胖,我想要一些更苗条的东西,比如在 Finder 复制对话框中看到的进度条。但是,Interface Builder 将NSProgressIndicator控件高度锁定为 20 像素,并且我的编程尝试瘦身不起作用,因为调用

awakeFromNib什么都不做,头文件中看到的暗示性外观似乎NSProgressIndicatorThickness没有插入我能看到的任何方法中。

有什么诀窍?

0 投票
5 回答
6192 浏览

cocoa - NSOperation main 中的 NSAutoreleasePool?

的文档+[NSThread detachNewThreadSelector:toTarget:withObject:]说:

对于非垃圾收集的应用程序,该方法aSelector负责为新分离的线程设置一个自动释放池,并在它退出之前释放该池。

NSAutoreleasePool我的问题是,我是否需要在我的方法覆盖中创建自己的-[NSOperation main],或者是由NSAutoreleasePool处理的创建NSOperation

0 投票
2 回答
9380 浏览

iphone - 链接文件的所有者和视图控制器 [iPhone SDK]

就能够在 ViewController 和 View 窗口之间建立关系而言,我似乎遇到了 iPhone SDK 2.1 的问题。就 Cocoa Touch 类而言,我继续前进并添加了一个 UIViewController子类。我确保目标是现有项目的一部分。之后我添加了一个用户界面-> 查看 XIB。在UIViewController我有一些直接的代码,我从其他地方的示例代码中复制/粘贴:

编辑视图控制器.h:

编辑视图控制器.m

如您所知,它没有多大作用。现在,当我单击我的新 xib 并使用 引用类标识时EditorViewController,不会发生自动完成,这对我来说意味着它没有对 EditorViewClass. 当我尝试控制并单击从视图到文件所有者时,我得到了 nada。

在这个过程中,我忽略了哪些可能的特性不允许我将视图输出到控制器?

除了将项目名称作为目标检查之外,我还如何确保我的用户界面视图 XIB 与项目相关联?