gpt4 book ai didi

iphone - Xcode4:为自定义核心数据管理对象生成不同的代码

转载 作者:行者123 更新时间:2023-12-03 16:03:16 26 4
gpt4 key购买 nike

现在 Xcode4 已公开发布,我将把这个问题移出 Apple 的 secret 开发论坛:

有人可以解释为什么以下过程中生成的代码与 Xcode3 中生成的代码不同吗?代码是更好还是这可能是一个错误?

我使用 Core Data 自定义托管类,这是我在 Xcode3 中遵循的过程:

  1. 转到模型编辑器
  2. 选择您想要为其生成源代码的实体
  3. 转到文件->新建->新文件
  4. 选择托管对象类(或者无论是什么,我无法再打开 xcode3 进行验证)
  5. 选择您想要生成的实体(之前在第 2 步中选择的实体已被选中)
  6. 点击“完成”

现在,在 Xcode4 中,我认为这是如何做到的,但我不确定,因为它会生成不同的代码:

  1. 前往模型编辑器
  2. 选择实体
  3. 转到文件->新建->新建文件
  4. 选择“NSManagedObject 子类”
  5. 选择位置并创建。

由于多种原因,它生成的代码有所不同:

  1. 用于添加和删除实体中集合成员的生成代码不再在@interface 中声明,而是在@implementation 中声明。这会导致代码感知无法检测到这些方法。
  2. 用于添加和删除对象的相同生成代码现已完全定义,不再使用 CoreDataGenerateAccessors 自动生成

例如,Xcode3 会在 HEADER 文件中生成以下代码:

@interface SampleEntity (CoreDataGeneratedAccessors)
- (void)addChildObject:(Child *)value;
- (void)removeChildObject:(Child *)value;
- (void)addChild:(NSSet *)value;
- (void)removeChild:(NSSet *)value;
@end

现在,Xcode4 在 IMPLMENTATION 文件中生成此代码:

@implementation SampleEntity
@dynamic children;
- (void)addChildObject:(Child *)value {
NSSet *changedObjects = [[NSSet alloc] initWithObjects:&value count:1];
[self willChangeValueForKey:@"children" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[[self primitiveValueForKey:@"children"] addObject:value];
[self didChangeValueForKey:@"children" withSetMutation:NSKeyValueUnionSetMutation usingObjects:changedObjects];
[changedObjects release];
}

有人可以权衡一下为什么会有所不同吗? Xcode4 代码感知不喜欢这种生成 NSManagedObject 子类的新方法。

最佳答案

简短回答:不要使用 Xcode 的代码生成。使用mogenerator,享受更轻松的生活。

至于为什么,很难说。我从来都不喜欢 Xcode 生成 Core Data 子类的方式,也不会推荐它们。我们可以猜测他们为什么要做他们所做的事情,但基于 Xcode4 和 Core Data 的其他问题,我将其归结为“未准备好”或“未完全测试”。

如果您想继续使用 Xcode 代码生成器,请提交雷达。

关于iphone - Xcode4:为自定义核心数据管理对象生成不同的代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5253753/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com