我在读NSArray就是这样的事情.听起来很沉重.我在桌面上有7本非常胖的书,关于Objective-C,Cocoa和C.他们都没有提到Class Cluster,至少我在书的后面的索引中找不到它.那是什么?
我想问你所有关于Objective C中代码味道的意见,特别是Cocoa Touch.我正在开发一个相当复杂的游戏,即将开始伟大的十二月重构.
我的很多课程,尤其是模型,都充满了处理内部业务逻辑的方法; 在我对抗大量头文件的战争中,我将隐藏在私人类别中.那些私人类别包含大量的声明,这让我感到不安......就像Objective-C一样让我对所有这些方法感到内疚.
我重构的越多(一件好事!),我就越需要保持所有这些重复(不太好).这只是感觉不对.
在像Ruby这样的语言中,社区强调非常简短,清晰,美观的方法.我的问题是,对于Objective C(特别是Cocoa Touch),您的方法有多长,控制器有多大,以及您在项目中找到的每个类的方法数量是多少?是否有任何特别漂亮,漂亮的课程由Objective C中的简短方法组成,或者它根本不是语言文化的重要组成部分?
披露:我正在阅读"The Little Schemer",这应该解释我的悲伤,重新:目标C.
我有一个对象字典; 它们都是应该可序列化的POCO对象.我应该用什么技术将它们写入磁盘.我正在寻找最简单的选项来编写一些列表来保存状态.
我想我有3个选择.
plist文件.然而,这似乎仅限于存储预定义的对象(字符串,数字等)而不是对象(如具有名称和年龄的人).
CoreData.(3.0中的新功能)这样可以正常工作; 但是我的数据模型需要改变以使其工作.这将是一个巨大的返工,我不确定是否值得努力.
SQLLite.实现一个简单的SQL数据库来读取和读取.我已经对此进行了最少的研究,但我不想"重写"一些核心数据ORM函数.
iphone cocoa serialization cocoa-touch cocoa-design-patterns
我来自iOS背景并开始学习Cocoa.在iOS上,除非我们有多个目标iPad,iPhone我们通常有一个窗口并使用管理屏幕UIViewControllers.每个新屏幕大部分时间都会映射到一个UIViewController.
然而,对于可可,这似乎是一个新的屏幕/窗口管理的地方NSWindow,它的子组件由管理NSViewController.因此,如果我有多个窗口应用程序,我应该NSWindowController为每个窗口分开.
这种方法是正确的还是我有误解?
cocoa cocoa-touch objective-c nswindowcontroller cocoa-design-patterns
假设我正在为Objective-C中的iPhone构建一个新类.在我的一个init方法中,我想手动分配一些内存.所以,我可能有这样的事情:
- (id)initWithSomeObject:(SomeObject *)someObject {
self = [super init];
if (self != nil) {
myObject = someObject;
[myObject retain];
if ( (memory = calloc(1, sizeof(SomeStruct)) == NULL) {
// What should I do here to clean up
[self release];
self = nil;
}
}
return self;
}
Run Code Online (Sandbox Code Playgroud)
现在,假设calloc()可能失败,并且无法分配内存对我的对象来说是灾难性的,我应该在if-body内做什么来正确清理?是否存在我应该使用的Objective-C习语或模式?
编辑:我收录了Rob Napier发布的代码.但是,我还是要释放myObject,对吧?或者添加的代码是否以某种方式触发dealloc()?
伙计们请让我知道代表和代表方法之间的区别及其差异和用法???
我有一个iPhone应用程序,它有一个MainWindow.xib,上面有一个UITabBarController,它在ViewControllers数组中有一个UINavigationController和一个自定义的UIViewController子类.UINavigationController和自定义视图控制器的根视图控制器都是从其他xib文件加载的.
该应用程序使用核心数据,堆栈在应用程序委托中初始化(根据惯例).
app委托将UITabBarController添加到窗口:
- (void)applicationDidFinishLaunching:(UIApplication *)application {
// Configure and show the window
[window addSubview:[tabBarController view]];
[window makeKeyAndVisible];
}
Run Code Online (Sandbox Code Playgroud)
我意识到我需要传播一个指向应用程序委托中创建的ManagedObjectContext的指针,但我不知道如何继续(甚至在这里和这里阅读关于该主题的所有好的评论):
我想我不太了解如何使用UITabBarController.
iphone cocoa-touch core-data uitabbarcontroller cocoa-design-patterns
我有一个NSArrayController,companiesController绑定到顶级Core Data实体,Companies.
A Company有很多Department,Department有很多Employee; 这些由1对多关系表示,departments和employees.
基于我认为的属性salary,Employee我可以动态地根据UI调用的方法中的工资进行过滤:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"ANY departments.employees.salary < %@", [NSNumber numberWithInt:23000]];
[companiesController setFilterPredicate:predicate];
Run Code Online (Sandbox Code Playgroud)
唉,这给了我错误:-[NSCFSet compare:]: unrecognized selector sent to instance.
怎么performSelector办?创建新方法NSThread和performSelector方法有什么区别?
它是如何工作的,我们应该在哪里使用它?
我正面临一个非常规律的情况.
我有一个NSArray,它有一个自定义类型的对象,比如Person.Person类具有以下属性:firstName,lastName和age.
如何从NSArray中获取仅具有Person对象的NSArray?
就像是:
NSArray *people;
NSArray *firstNames = [people getArrayOfAttribute:@"firstName" andType:Person.Class]
Run Code Online (Sandbox Code Playgroud)
我有一个编写for循环的解决方案,并填写firstNames数组,但我不想这样做.
iphone objective-c iphone-sdk-3.0 cocoa-design-patterns ios4
objective-c ×7
cocoa-touch ×5
iphone ×5
cocoa ×4
core-data ×2
delegates ×1
ios4 ×1
nspredicate ×1