static const Vs extern const

我一直在我的头文件中使用静态常量,如下所示: static NSString * const myString = @"foo"; 但是已经读过,这不是“安全”或正确的做法。 显然,如果我想要从另一个类访问我的conststring,我应该在我的.h中声明string: extern NSString * const myString; 然后在我的.m文件中: NSString * const myString = @"foo"; 它是否正确? 如果是这样,什么原因不直接在我的.h文件中声明它是静态的? 它工作得很好,我也看不到任何“安全”问题。 这是一个常量,因此它不能从外部改变,而且它是我有意在类之外访问的东西。 我能想到的唯一的另一件事是隐藏string的价值?

核心数据 – 轻量级迁移和多核心数据模型文件(xcdatamodel)

从两个单独的xcdatamodel文件定义的存储迁移时,执行轻量级迁移时遇到问题。 在我的应用程序的1.0版中,我将模型分解为分析模型,模型-A和模型-B中的所有其他模型。 编译时,模型将被分组在一起,一切进展顺利。 在使用新版本1.1时,我通过向模型B添加新模型版本并将新版本设置为活动状态来升级模型B. 从1.0升级到1.1时出现问题。 看来Core Data检查磁盘上的模型存储(由版本1.0创build),并寻找描述它的模型,但无法find定义整个商店的SINGLE模型(模型-A仅涵盖分析,模型-B覆盖一切),所以它会抛出一个“无法find源存储模型”的错误。 有没有人find一个解决scheme来分离模型,但仍然允许升级+轻量级迁移工作,没有定义自定义迁移额外的麻烦? 以下是用于加载模型的代码片段: NSArray *modelNames = [NSArray arrayWithObjects:@"model-A", @"model-B", nil]; NSMutableArray *models = [NSMutableArray array]; for (NSString *name in modelNames) { LogInfo(@"loading model %@", name); NSURL *modelURL = [[NSBundle mainBundle] URLForResource:name withExtension:@"momd"]; NSManagedObjectModel *model = [[[NSManagedObjectModel alloc] initWithContentsOfURL:modelURL] autorelease]; [models addObject:model]; } // combine all the separate models into […]

按顺序使用图像数组的animation

我有一系列的图像,我想通过连续播放这些图像来进行animation处理。 我想多次重复整个循环。 我正在为iPad开发一款游戏。 向我build议一个方法,在Objective-C中用Cocoa框架实现这个function。

如何运行和debuggingiPhone应用程序的unit testing

注:unit testing现在更容易设置。 本教程与Xcode版本5及以上版本无关。 我花了相当一段时间,但终于成功地为我的项目工作。 为了创build“逻辑”testing,我遵循了关于创build逻辑testing的Apple指导原则 。 一旦你明白逻辑testing是在构build过程中运行的,这个工作正常。 为了能够debugging这些testing,需要创build一个自定义可执行文件来调用这些testing。 Sean Miceli在Grokking Cocoa博客上的文章提供了所有这些信息。 然而,之后并没有立竿见影的成功,需要一些调整。 我将详细介绍Sean教程中的主要步骤,提供一些“傻瓜”轮廓,这些轮廓花了我一些时间来弄清楚: 设置一个包含unit testing但不运行它们的目标 安装可执行文件以运行testing 设置最简单的环境variables,以便可以find你的unit testing 以下是使用XCode 3.2.5进行的 注意XCode 4 在XCode 4中,可以直接debugging你的unit testing。 只需编写testing,将其作为testing之一添加到目标中,并在其中设置断点。 就这样。 更多将会来。 步骤1 – 设置目标 复制您的项目目标下的unit testing目标。 这也将创buildunit testing产品(.octest文件)的副本。 在下图中,“LogicTest”是原始目标。 将unit testing目标和unit testing产品(.octest文件)重命名为相同的名称。 在下图中“LogicTestsDebug”是重复的目标。 删除新目标的RunScript阶段 两者的名称可以是任何东西,但我会避免空格。 第2步 – 设置otest 这里最重要的一点是要得到正确的,也就是说你的iOS版本,而不是默认的Mac版本。 这在肖恩的教程中有很好的描述。 以下是一些帮助我设置正确的更多细节: 转到项目 – >新的自定义可执行文件。 这将popup一个窗口,提示您input一个可执行文件名称和一个可执行文件path。 input任何你想要的名字。 复制粘贴path到您的iOS otest可执行文件。 […]

在iOS设备上滚动时,元素的z-index不起作用

我的布局相当简单,一个重复的背景元素,几个垂直空间(道路)和一些水平桥梁和一个小汽车,当你滚动时,应该在他们的下面开车。 我的Mac上的一切工作正常,但在iOS设备上,我的testing设备是:iOS 6.1上的iPhone 4,iOS 6.1.3上的iPad 2 z-index当滚动事件处于活动状态时, z-index不被遵守。 这意味着,当你滚动时, position: fixed在window的汽车正在越过桥(其具有比“汽车”更高的z-index ),而不是使z-index更高,因为它应该是和非iOS的浏览器,使得汽车驾驶的桥梁下。 这看起来像一个简单的分层问题,但即使是一个非常简单的testing案例,这个错误仍然是显而易见的。 testing案例: http : //plnkr.co/EAE5AdJqJiuXgSsrfTWH (在iPad上全屏查看,以避免与演示内容无关的iframe滚动问题) 有谁知道什么是错误的代码,这将导致z-index不工作,而滚动处于活动状态? 注意: iOS上的Chrome和原生的Mobile Safari都会发生这种情况。 下面是链接到上面的简化testing用例上运行的代码位,以防有人在不打开演示的情况下指出修复。 HTML: <!DOCTYPE html> <html> <head> <link rel="stylesheet" href="style.css"> </head> <body> <div class="car"></div> <div class="street"></div> <div class="bridge"></div> <div class="street"></div> <div class="bridge"></div> <div class="street"></div> <div class="bridge"></div> <div class="street"></div> <div class="bridge"></div> <div class="street"></div> <div class="bridge"></div> […]

在没有开发者程序,iOS 5.1的设备上安装iOS应用程序

我正在尝试将我的iOS应用程序安装到运行iOS 5.1的设备上。 它目前不是越狱,但如果这是我所要做的。 当我运行iOS 5.0.1时,我跟随了这个主题: 如何将Xcode中的iPhone应用程序部署到真正的iPhone设备上? 并创build了一个自我签署的证书,像一个魅力工作。 更新到Xcode 4.3.2和iOS 5.1后,我无法正常工作 我也尝试跟随这个线程,但没有成功: 在没有苹果开发者计划或越狱的设备上testingiOS应用程序 那么,如何将我的应用程序从Xcode 4.3.2安装到运行iOS 5.1的iPhone 4中,而不是在开发人员计划中的成员? 编辑:我现在能够得到应用程序到iPhone。 但是当我尝试启动他们时,他们崩溃,甚至没有启动图像出现。 我已经越狱了设备,安装了Appsync,编辑了SDKSettings.plist,并将构build属性更改为“不要编码”。 这是当我尝试启动应用程序时,控制台给我的,我没有得到Xcode的任何崩溃日志: May 8 18:25:35 unknown SpringBoard[54] <Warning>: Unable to obtain a task name port right for pid 1017: (os/kern) failure May 8 18:25:35 unknown com.apple.launchd[1] <Notice>: (UIKitApplication:com.KerschApps.Test[0x2fa8]) Exited: Killed: 9 May 8 18:25:35 unknown com.apple.launchd[1] <Warning>: […]

让两个UIScrollView跟着彼此滚动

我将如何使两个滚动视图跟随彼此滚动? 例如,我在屏幕左侧有一个滚动视图(A),其内容可以上下滚动,但不能左右滚动。 滚动视图B与A的向上和向下匹配,但也可以向左和向右滚动。 滚动视图A始终在屏幕上。 ———————————————————– | | | | | | | | | | A | B | | | | | scrolls | | | up & down | scrolls all directions | | | | ———————————————————– 我该如何做,所以上下滚动(任一视图)也使其他视图滚动在相同的上下方向? 还是有另一种方法来做到这一点?

与AVAudioSessionCategoryPlayAndRecord组合在一起的低录音量

当我设置: [[AVAudioSession sharedInstance] setCategory: AVAudioSessionCategoryPlayAndRecord error:NULL]; …录音和播放工作正常,只是播放音量比当我只是播放相同的声音,没有logging和设置PlayAndRecord时低60%左右。 我需要获得高音量(为了检查用户是否在麦克风中吹),因此我开始了录音。 但没有设置AVAudio..PlayandRecord,我无法播放任何声音在此期间。 这就是我实施这个命令的原因。 任何帮助? 克里斯

我可以将一个localizable.strings文件加载到iOS应用程序中吗?

比方说,我的应用程序只能用英文运行。 但我不想每次添加新语言时都要发布一个新版本。 我的build议是将这个localizable.strings文件远程加载到我的应用程序。 我的应用程序有加载文件从FTP站点的设施。 你们认为可以用这种方式加载语言吗? 或者,应用程序是否需要在编译时编译语言文件?

如何使用iOS基础SDK 6.1将项目部署到使用iOS 7的设备

我一直在这个问题上浪费了我整整一天,并找不到解决scheme:我一直在开发与iOS 6.1 SDK的应用程序,整个devise依赖于iOS 6.1 UI。 昨天,我把手机更新到了iOS 7,更新完成后,从备份中恢复的以前部署的应用看起来和以前一样工作(在iOS 6.1上); 一切都很好。 但是,我不得不将Xcode更新到版本5,所以我可以在开发过程中继续将连续的debugging版本部署到我的iOS 7设备。 在更新到Xcode 5之前,我已经从Xcode的内部文件夹中备份了iPhoneOS6.1.sdk包; 然后更新到Xcode 5,然后将iPhoneOS6.1.sdk包放回到它的文件夹中,旁边是安装了Xcode 5的iOS 7 SDK。 我已经将项目的基础SDK切换到了基本SDKselect器列表中的iOS 6.1,并确保在界面生成器中我的所有Storyboard / XIB都设置为iOS 6.1。 但是,当我将应用程序部署到我的手机时,它看起来像垃圾,因为它与iOS 7 UI元素一起显示。 如果我使用装有iOS 6.1的设备,一切看起来都不错。 如果我select在iOS 7设备上进行debugging,它看起来像XCode不会给我select的基础SDK,并将应用程序链接到iOS 7。 我如何强制Xcode,将相同的6.1链接的东西部署到所有设备,无论它安装的iOS版本?