是否有可能在iPhone上制作一个50MB的大数据库?这样可以通过智能方式快速搜索到它?有SQlite?
在你的一个Objective-C课程中实现+ initialize或+ load方法时,你应该始终从这种防守开始吗?:
@implementation MyClass
+ (void)initialize {
if (self == [MyClass class]) {
...
}
}
...
@end
Run Code Online (Sandbox Code Playgroud)
看起来像+ load和+ initialize中的代码通常只想执行一次.所以这有助于避免子类加载/初始化时的重复执行.
我想我只是想从一些ObjC巫师那里得到一些强化,这是必要/常见的做法......
这是什么常见的智慧?你会建议总是这样做吗?
对于+ load和+ initialize,你的建议是否相同,或者它们应该如何处理?
谢谢.
如何使用Interface Builder绑定iPhone SDK控件(比如UISlider)?
与常规Cocoa应用程序不同,当使用Interface Builder打开iPhone-app XIB时,绑定选项卡似乎不存在
我是Objective C和Cocoa的新手.我只是不知道如何发送UIView的超级视图.我无法让它发挥作用.这是我到目前为止所尝试的:
在我的MainView中,我有一个名为resetDrawType的方法:
- (void) resetDrawType {
self.drawType = foo;
}
Run Code Online (Sandbox Code Playgroud)
同样在MainView中我创建一个子视图并将其添加到MainView:
mySubView *mySubView = [[mySubView alloc] initWithFrame:CGRectMake(foo, foo, foo, foo)];
[self addSubview:mySubView];
[mySubView release];
Run Code Online (Sandbox Code Playgroud)
然后当子视图完成其绘图时,我想将消息resetDrawType发送到其superview,即MainView.
我试过这个
[(MainView*)[self superview] resetDrawType];
Run Code Online (Sandbox Code Playgroud)
和
[(MainView*)self.superview resetDrawType];
Run Code Online (Sandbox Code Playgroud)
......什么都行不通.我了解了非正式协议,因此我将此代码添加到MainView.h中
@interface NSObject ( resetters )
- (void) resetDrawType;
@end
Run Code Online (Sandbox Code Playgroud)
但仍然没有.接下来我发现了这个选择器的东西并在子视图中尝试了这个:
if ([self.superview respondsToSelector:@selector(resetDrawType:)])
[self.superview performSelector:@selector(resetDrawType) withObject:nil];
Run Code Online (Sandbox Code Playgroud)
它也没用.我究竟做错了什么?谢谢你的帮助.
我想弄清楚如何决定何时使用NSDictionary或NSCoder/NSCoding?
对于一般属性列表而言,似乎NSDictionary是一种简单的方法,可以生成在应用程序之外可以轻松编辑的XML文件.
当处理保存数据或可能嵌套在其中的其他自定义类的自定义类时,似乎NSCoder/NSCoding将是更好的路径,因为它将遍历所有包含的对象类并在使用存档命令时对它们进行编码.
NSDictionary似乎需要更多的工作才能将所有属性或数据特性提供到单个级别才能保存它,而NSCoder/NSCoding会自动编码实现NSCoding接口的嵌套自定义类.
除了它是二进制数据并且在您的应用程序之外不可编辑之外是否真的有理由使用其中一个?沿着这些方向,是否有指示您应该在两者之间倾斜的方式?我错过了一些明显的东西吗
当发布一个可能存在或不存在的实例时,我通常会这样写:
if(object!= nil)[object release];
但是因为向nil发送消息不是问题,那有条件的必要吗?
我想问题归结为:使用更多开销,将对象与nil进行比较,或者发送nil消息?
好的,我有我的普通应用程序处于纵向模式.我可以强制我的应用程序转到横向模式的视图(使用navigationcontroller和viewcontroller),如下所示:
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationLandscapeRight];
}
Run Code Online (Sandbox Code Playgroud)
但是当我回到主菜单(tableview)时,它会直接回到肖像.我试试这段代码:
- (void)viewWillAppear:(BOOL)animated {
[[UIDevice currentDevice] setOrientation:UIInterfaceOrientationPortrait];
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用..
有任何想法吗?
我有几个CALayers我试图动画一个新的zPosition,每个层稍微延迟与其他层.
每个动画应该花费0.25秒并在上一个动画开始后0.05秒开始.在每个动画结束时,图层将从图层树中删除.
我已成功使用-animationDidStop:finished:委托方法删除我们的图层,但我无法正确订购动画.
是否可以以这种方式安排动画,以及如何安排?
我认为自制的@property setter应该是这样的:
-(void) setFoo:(Foo *)newFoo {
// Safeguards
// ...
[self willChangeValueForKey:@"foo"];
// Switcheroo
// ...
[self didChangeValueForKey:@"foo"];
}
Run Code Online (Sandbox Code Playgroud)
但是我在博客文章中看到很多代码,他们一直在做Cocoa的时间比我长得多,在这里它是这样的:
-(void) setFoo(Foo *)newFoo {
// Safeguards
// ...
// Switcheroo
// ...
}
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,我们是否需要调用KVO通知方法?或者,如果您使用现代运行时更新私有iVar,它是否会神奇地完成?
我的通用iPad应用程序中有几个uiPopoverControllers.我现在要求在某个弹出窗口被解除后触发一个函数.如果用户在弹出窗口内单击"关闭",我可以轻松地执行此操作,但如果他们触摸屏幕以隐藏弹出窗口,则无法触发我的功能.
我已经谷歌搜索了一段时间,似乎无法找到任何委托方法,我可以在我的主视图控制器中使用它来捕获它们.我会喜欢像didDismissPopoverController这样的东西 - 但我猜它是不可用的.
如果没有,我想唯一要做的就是检测触摸然后触发?基本上我突出显示UITableView行并加载popover.我需要取消选择行 - 所以想简单地调用[table reloaddata].
感谢您对此提供的任何帮助!