我的任务是处理一个有一些令人困惑的属性的项目.
该项目的性质是它不会为具有相同编译设置的iPhone模拟器和iPhone设备进行编译.我认为这与需要针对x86或arm6/7进行专门编译有关,具体取决于目标平台.
因此,当在Xcode的Build Settings视图中查看时,项目的构建设置不允许我为每个特定文件设置特定的编译器标志.但是,以前开发过该项目的开发人员已经以某种方式声明了该行:
CE7FEB5710F09234004DE356 /* MyFile.m in Sources */ = {isa = PBXBuildFile; fileRef = CE7FEB5510F09234004DE356 /* MyFile.m */; settings = {COMPILER_FLAGS = "-fasm-blocks -marm -mfpu=neon"; }; };
Run Code Online (Sandbox Code Playgroud)
如果不手动编辑项目文件,有没有办法做到这一点?我知道编辑项目文件可能导致完全破坏它,所以我宁愿不这样做,因为我显然不像以前的开发人员那样知道.
所以澄清一下,问题是:
编译模拟器时构建失败,除非我删除-fasm-blocks标志.编译设备时构建失败,除非我添加-fasm-blocks标志.有没有办法在不编辑项目文件的情况下为每个文件设置此标志?
调试我的应用时,我有此消息:
类NSZombie _GEOTileKeyWrapper在两者中都实现了?和?? ?? 将使用两者之一.哪一个未定义.
你知道这是什么吗?以及如何解决它?
我试图区分iPhone上的两个(或更多)UITouch对象.具体来说,我想知道触摸发生的顺序.
例如,在我的-touchesBegan:withEvent:方法中,我获得了一个UITouch对象的NSSet.现在我可以找出有多少触摸,但是,哪个对象代表哪个手指?
我注意到UITouch上的时间戳属性 - 这就是我要找的东西吗?我知道如何获得最后一次或第一次触摸是有用的 - 提供触摸不会变异......
这就是我的问题所在.我可以使用时间戳来挑出最新的触摸,但随后首先发生的触摸移动,IT成为最新的触摸......
在本练习结束时,我希望能够实现"捏"手势来放大或缩小等.
非常感谢任何帮助,谢谢.
当我将我的应用程序提交到Apple应用程序商店时,他们是否看到了我的源代码?
我在我的iPhone应用程序中使用Core Text布局了一些文本.我正在使用NSAttributedString在给定范围的文本中设置某些样式.
我似乎找不到用于设置背景/高亮颜色的属性,尽管看起来它是可能的.我找不到一个听起来相关的属性名称常量,文档只列出:
kCTCharacterShapeAttributeName
kCTFontAttributeName
kCTKernAttributeName
kCTLigatureAttributeName
kCTForegroundColorAttributeName
kCTForegroundColorFromContextAttributeName
kCTParagraphStyleAttributeName
kCTStrokeWidthAttributeName
kCTStrokeColorAttributeName
kCTSuperscriptAttributeName
kCTUnderlineColorAttributeName
kCTUnderlineStyleAttributeName
kCTVerticalFormsAttributeName
kCTGlyphInfoAttributeName
kCTRunDelegateAttributeName
Run Code Online (Sandbox Code Playgroud)
Twitterrific的开发者Craig Hockenberry在Twitter上公开表示他使用Core Text来呈现推文,Twitterrific有这个背景/亮点,当你触摸链接时我正在讨论.

任何正确方向的帮助或指示都会非常棒,谢谢.
编辑:这里是推文的链接克雷格发布了提到"核心文本,归因于字符串和大量努力工作",以及后续提到使用CTFrameSetter指标来计算触摸是否与链接相交.
在Xcode之外我使用特定版本的Ruby,使用RVM来管理多个Ruby安装.
Apple的命令行开发工具安装Ruby,/usr/bin/ruby版本为1.8.7.
我通过RVM使用1.9.3.
有没有办法在运行Run Script构建阶段时强制Xcode使用我的1.9.3安装?
我已经尝试将Shell路径设置为我的特定Ruby的完整路径,但这似乎没有什么区别,我的意思是我在1.9.3中安装的特定Gems不可用/可见在Xcode中运行时的脚本.
如果我xcodebuild在命令行上运行我的项目,则运行脚本阶段使用我的特定Ruby,因为它是在我的shell环境中运行的(即使项目文件中的Shell路径设置为/usr/bin/ruby,它仍然使用我的1.9.3) .
我该怎么做才能让IDE使用我的1.9.3 Ruby安装?
我想在我的iPhone应用程序中使用Core Data.
该应用程序并不真正需要存储使用的数据,但需要进行管理和查询.
核心数据可以用于纯粹存在于内存中并且不会持久存储到磁盘的数据集吗?
我试图检测特定应用程序何时启动.
目前我正在使用NSWorkspace,注册"确实启动应用程序"通知.我还使用该runningApplications方法来获取应用启动时当前正在运行的应用.
对于大多数应用程序,应用程序包的名称就足够了.我有一个"已知应用程序"的plist,我用通知中传递的名称交叉检查.
这可以正常工作,直到您遇到一个应用程序作为代理,使用命令行参数启动另一个应用程序.
示例:Mac上新发布的Portal没有专用的应用程序包.Steam可以创建一个快捷方式,只需hl2_osx使用-game参数和portal参数启动应用程序即可.
由于更多基于源的游戏正在前往Mac,我想他们将使用相同的方法启动,有效地运行hl2_osx带有-game参数的应用程序.
有没有一种很好的方法来使用Cocoa API获取参数列表(及其参数)?
NSProcessInfo 接近,提供`-arguments'方法,但只为自己的进程提供信息......
NSRunningApplication 提供了使用PID获取任意应用程序信息的能力,但没有命令行参数...
有没有什么能填补两者之间的空白?
我试图不去产生NSTask运行ps -p [pid]和解析输出的路线......我更喜欢更高级别的东西.
我正在查看一些开源代码并尝试理解作者为何以特定方式做了某些事情.
该类是一个包装器,NSArray用于创建具有push,pop等的堆栈数据结构.
一种方法是topObject返回堆栈中最顶层的对象,其实现是:
- (id)top {
return [[[stack lastObject] retain] autorelease]; // stack is an instance of NSMutableArray
}
Run Code Online (Sandbox Code Playgroud)
什么是保留,然后立即自动释放?
我最初的反应是,这会阻止分析仪警告内存泄漏,但我在没有保留/自动释放的情况下进行了分析,但仍然没有警告.
查看生命周期,将创建一个对象,将其推送到堆栈并释放,因此堆栈拥有该对象(底层数组将在添加时保留它).
所以我不明白这里使用retain/autorelease ......
我一直在玩两种不同的UIView动画方式:开始/提交和阻止.
我注意到beginAnimations:context:/处理commitAnimations方式非常异步,在动画运行时保持UI自由.
但是,我也注意到这种animateWithDuration:animations:completion方式似乎阻止了UI,使其在动画运行时没有响应.
我认为使用块的一个要点是轻松实现异步执行.为什么UIView动画的块变体会阻止UI,而开始/提交变体却没有?
编辑:
我的问题最初假设块动画是同步操作并阻止了UI.从Jeff Kelly的回答中可以看出,情况并非如此.我原来的假设不正确,块动画不同步.有关详细信息,请参阅Jeff的答案.
iphone ×7
objective-c ×5
cocoa ×2
xcode ×2
animation ×1
app-store ×1
cocoa-touch ×1
core-data ×1
core-text ×1
debugging ×1
foundation ×1
highlight ×1
ios ×1
multi-touch ×1
nszombie ×1
persistence ×1
pid ×1
process ×1
ruby ×1
rvm ×1
uikit ×1
uiview ×1