标签: cocoa-design-patterns

Objective-C中究竟是什么叫做"类群"?

我在读NSArray就是这样的事情.听起来很沉重.我在桌面上有7本非常胖的书,关于Objective-C,Cocoa和C.他们都没有提到Class Cluster,至少我在书的后面的索引中找不到它.那是什么?

cocoa objective-c cocoa-design-patterns class-cluster

89
推荐指数
5
解决办法
3万
查看次数

使Objective-C类看起来很漂亮

我想问你所有关于Objective C中代码味道的意见,特别是Cocoa Touch.我正在开发一个相当复杂的游戏,即将开始伟大的十二月重构.

我的很多课程,尤其是模型,都充满了处理内部业务逻辑的方法; 在我对抗大量头文件的战争中,我将隐藏在私人类别中.那些私人类别包含大量的声明,这让我感到不安......就像Objective-C一样让我对所有这些方法感到内疚.

我重构的越多(一件好事!),我就越需要保持所有这些重复(不太好).这只是感觉不对.

在像Ruby这样的语言中,社区强调非常简短,清晰,美观的方法.我的问题是,对于Objective C(特别是Cocoa Touch),您的方法有多长,控制器有多大,以及您在项目中找到的每个类的方法数量是多少?是否有任何特别漂亮,漂亮的课程由Objective C中的简短方法组成,或者它根本不是语言文化的重要组成部分?

披露:我正在阅读"The Little Schemer",这应该解释我的悲伤,重新:目标C.

cocoa-touch objective-c cocoa-design-patterns

37
推荐指数
2
解决办法
2018
查看次数

如何在iPhone sdk中序列化一个简单的对象?

我有一个对象字典; 它们都是应该可序列化的POCO对象.我应该用什么技术将它们写入磁盘.我正在寻找最简单的选项来编写一些列表来保存状态.

我想我有3个选择.

  1. plist文件.然而,这似乎仅限于存储预定义的对象(字符串,数字等)而不是对象(如具有名称和年龄的人).

  2. CoreData.(3.0中的新功能)这样可以正常工作; 但是我的数据模型需要改变以使其工作.这将是一个巨大的返工,我不确定是否值得努力.

  3. SQLLite.实现一个简单的SQL数据库来读取和读取.我已经对此进行了最少的研究,但我不想"重写"一些核心数据ORM函数.

iphone cocoa serialization cocoa-touch cocoa-design-patterns

28
推荐指数
2
解决办法
2万
查看次数

NSWindowController与NSViewController之间的区别

我来自iOS背景并开始学习Cocoa.在iOS上,除非我们有多个目标iPad,iPhone我们通常有一个窗口并使用管理屏幕UIViewControllers.每个新屏幕大部分时间都会映射到一个UIViewController.

然而,对于可可,这似乎是一个新的屏幕/窗口管理的地方NSWindow,它的子组件由管理NSViewController.因此,如果我有多个窗口应用程序,我应该NSWindowController为每个窗口分开.

这种方法是正确的还是我有误解?

cocoa cocoa-touch objective-c nswindowcontroller cocoa-design-patterns

27
推荐指数
2
解决办法
9668
查看次数

我应该如何处理Objective-C中init:方法的失败?

假设我正在为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 objective-c cocoa-design-patterns

24
推荐指数
1
解决办法
3428
查看次数

什么是委托和委托方法

伙计们请让我知道代表和代表方法之间的区别及其差异和用法???

iphone delegates cocoa-design-patterns

15
推荐指数
3
解决办法
2万
查看次数

如何在使用UITabBarController时共享ManagedObjectContext

我有一个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的指针,但我不知道如何继续(甚至在这里这里阅读关于该主题的所有好的评论):

  • 我是否将ManagedObjectContext传播到UITabBarController并从那里传播到各个视图控制器,如果是,如何?
  • 或者我将ManagedObjectContext直接传播到UINavigationController的根视图控制器和自定义视图控制器,我该怎么做?

我想我不太了解如何使用UITabBarController.

iphone cocoa-touch core-data uitabbarcontroller cocoa-design-patterns

13
推荐指数
2
解决办法
1万
查看次数

使用NSPredicate与核心数据建立深层关系

我有一个NSArrayController,companiesController绑定到顶级Core Data实体,Companies.

A Company有很多Department,Department有很多Employee; 这些由1对多关系表示,departmentsemployees.

基于我认为的属性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.

core-data objective-c nspredicate cocoa-design-patterns

11
推荐指数
2
解决办法
9203
查看次数

performSelector方法有什么作用?

怎么performSelector办?创建新方法NSThreadperformSelector方法有什么区别?

它是如何工作的,我们应该在哪里使用它?

cocoa cocoa-touch objective-c cocoa-design-patterns

9
推荐指数
1
解决办法
6976
查看次数

从NSArray获取NSArray的单个属性

我正面临一个非常规律​​的情况.

我有一个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

9
推荐指数
1
解决办法
1155
查看次数