NSInvocation工作究竟如何?有一个很好的介绍吗?
我特别关注以下代码(来自Cocoa Programming for Mac OS X,3rd Edition)的工作原理,但是也可以独立于教程示例应用这些概念.代码:
- (void)insertObject:(Person *)p inEmployeesAtIndex:(int)index
{
NSLog(@"adding %@ to %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager *undo = [self undoManager];
[[undo prepareWithInvocationTarget:self] removeObjectFromEmployeesAtIndex:index];
if (![undo isUndoing])
[undo setActionName:@"Insert Person"];
// Finally, add person to the array
[employees insertObject:p atIndex:index];
}
- (void)removeObjectFromEmployeesAtIndex:(int)index
{
Person *p = [employees objectAtIndex:index];
NSLog(@"removing %@ from %@", p, employees);
// Add inverse of this operation to undo stack
NSUndoManager …Run Code Online (Sandbox Code Playgroud) 我一直听说在C中你必须真正关注你如何管理记忆.而且我还在开始学习C语言,但到目前为止,我根本不需要做任何内存管理相关活动.我总是想象必须释放变量并做各种丑陋的事情.但事实似乎并非如此.
有人可以给我(带代码示例)一个例子,说明何时需要进行"内存管理"?
我有一个基于导航应用程序模板的项目.在AppDelegate中是方法-applicationDidFinishLoading:和-applicationWillTerminate:.在这些方法中,我正在加载并保存应用程序数据,并将其存储在实例变量中(它实际上是一个对象图).
当应用程序加载时,它会加载MainWindow.xib,它有一个NavigationConroller,后者又有一个RootViewController.RootViewController nibName属性指向RootView(我的实际控制器类).
在我的课堂上,我希望引用我在-applicationDidFinishLoading:方法中创建的对象,以便我可以获得它的引用.
谁能告诉我怎么做?我知道如何在我以编程方式创建的对象之间进行引用,但考虑到中间步骤是在NIB文件中完成的,我似乎无法解决问题.
之前看到这个问过,但我的例子似乎没有用.
const CGFloat *toCol = CGColorGetComponents([[UIColor greenColor] CGColor]);
Run Code Online (Sandbox Code Playgroud)
使用GDB查看数组是空的.任何提示?
我在CrashLanding示例中使用Apple的SoundEngine示例代码来播放多个音频文件.使用CrashLanding附带的示例caf文件一切正常但是当我尝试使用我自己的样本使用afconvert转换为CAF时,我得到的是一个沉默的石头;)
有没有人有afconvert设置会生成一个能够通过OpenAL播放的CAF文件?
我想知道CALayer中动画的回调位置(或者有什么内容).具体来说,对于隐含的动画,如改变框架,位置等.在UIView中,你可以这样做:
[UIView beginAnimations:@"SlideOut" context:nil];
[UIView setAnimationDuration:.3];
[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:@selector(animateOut:finished:context:)];
CGRect frame = self.frame;
frame.origin.y = 480;
self.frame = frame;
[UIView commitAnimations];
Run Code Online (Sandbox Code Playgroud)
具体来说,这setAnimationDidStopSelector就是我想要的CALayer中的动画.有什么相似的吗?
TIA.
我希望能够通过我的应用程序中的任何位置引用某些状态/对象.例如,用户登录到他们的应用程序,我需要调用Web服务并检索用户信息.然后,我希望能够从应用程序的任何位置访问此信息,如下所示:
myAppDelegate *delegate = [[UIApplication sharedApplication] delegate];
user = delegate.u;
Run Code Online (Sandbox Code Playgroud)
是否在应用程序委托中将实例变量设置为User对象,并在需要时从那里引用它是一种糟糕的方式来实现它?我通常根据用户的登录设置它.
想听听专业人士如何处理这个.
我最近在我的应用程序中遇到了一个问题,我在UIViewController子类的-awakeFromNib方法中创建的一些子视图正 从视图中消失.经过一番探索之后,我发现移动我输入的代码-awakeFromNib来-viewDidLoad解决问题.-awakeFromNib当UIViewController从nib中取消归档时,似乎只调用一次,并且-viewDidLoad每次取消归档视图时都会调用它.
那么最佳做法是什么?看起来UIViewController -awakeFromNib不应该向视图添加任何视图,应该完成那种东西-viewDidLoad.我理解正确吗?还是我比我想的更困惑?
我将NSHTTPCookieStorage在iOS应用程序中使用来管理从URL检索到的cookie,我知道它将在应用程序的运行时管理cookie.但是,我想知道在应用程序关闭后是否可以保留cookie.然后在再次打开应用程序时再次阅读这些cookie.是否NSHTTPCookieStorage在应用程序之间保留cookie?或者只是在应用程序运行时?我需要用来CoreData坚持这些饼干吗?`
我在Xcode 4中创建了一个全新的iOS项目,并包含了单元测试.默认应用程序有2个目标,主应用程序和单元测试包.使用"产品>测试"(Command-U)构建应用程序,构建单元测试包,启动iOS模拟器并运行测试.现在,我希望能够从命令行执行相同的操作.命令行工具(xcodebuild)没有"测试"操作,但似乎我应该能够直接构建单元测试包目标,因为它取决于应用程序本身.但是,运行:
xcodebuild -target TestAppTests -sdk iphonesimulator4.3 -configuration Debug build
Run Code Online (Sandbox Code Playgroud)
给出以下消息:
/Developer/Platforms/iPhoneSimulator.platform/Developer/Tools/Tools/RunPlatformUnitTests:95: warning: Skipping tests; the iPhoneSimulator platform does not currently support application-hosted tests (TEST_HOST set).
Run Code Online (Sandbox Code Playgroud)
这似乎是一个谎言,因为当我从GUI运行Command-U时,为我的单元测试包目标设置了测试主机.我之前看过有关逻辑测试和应用程序测试之间分离的帖子,但似乎Xcode 4消除了这种区别.我是如何从命令行运行测试的?
iphone ×5
cocoa-touch ×4
objective-c ×2
afconvert ×1
c ×1
cgcolor ×1
cocoa ×1
core-audio ×1
ios ×1
memory ×1
ocunit ×1
openal ×1
uicolor ×1
undo-redo ×1
unit-testing ×1
xcode ×1
xcode4 ×1
xcodebuild ×1