【问题标题】:ios/objective-c/core-data: How to show relationship as property in NSManagedObjectsios/objective-c/core-data:如何在 NSManagedObject 中将关系显示为属性
【发布时间】:2015-10-02 17:51:31
【问题描述】:

我有两个实体,并且刚刚在它们之间创建了 1:1 的关系。实体有子类,但此时它们中有很多代码,所以我不想使用 Xcode 自动生成新的 NSManagedObject 子类。

相反,我认为我可以只引用每个属性中的关系。我这样做了,它似乎工作了一段时间,但现在它抛出了神秘的错误,我似乎无法摆脱它们。我已经导入了每一个的倒数,但它没有帮助。谁能推荐我应该做什么?非常感谢。

Subclassed NSManagedObjects (simplified)

//Items.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "Notes.h"

@interface Items : NSManagedObject
@property (nonatomic, retain) NSNumber *iid;
@property (nonatomic, retain) NSString *item;

//this is relationship
@property (nonatomic, retain) Notes *note;
//above throws error Unkown Type Name 'Notes'
@end

//Notes.h
#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import "Items.h"

@interface Notes : NSManagedObject
@property (nonatomic, retain) NSNumber * nid;
@property (nonatomic, retain) NSString * note;

//this is relationship
@property (nonatomic, retain) Items *item;
//above throws error Unkown Type Name 'Item'
@end

这类似于关系

【问题讨论】:

  • 为什么要使用保留而不使用 ARC(如果使用,请使用非原子,强)?
  • @Ron 我假设他正在使用保留,因为 Xcode 生成的类仍然使用保留来实现向后兼容性。
  • 谢谢,我尝试了两种方式,因为另一个提到 strong 但会使用strong的配置出错。

标签: ios objective-c relationship nsmanagedobject


【解决方案1】:

在 Objective-C 中,您不能在声明类型之前使用它。要解决此问题,您可以通过将这些行放在 #import 语句下方和第一个 @interface 上方来使用类的前向声明。

@class Items;
@class Notes;

如果您发布的代码不能代表您的实际文件结构(我认为不是),您必须将 Items@class 语句放入 Notes.h 文件和 @987654326 Items.h 文件中Notes 的@ 语句。

【讨论】:

  • 出于某种原因,我认为它必须是一个或另一个导入或类。但这成功了。谢谢!
  • 您的#import 语句仅包含其他文件的内容,这些文件可能包含也可能不包含您的内容所需的声明。如果它们不包含您需要的声明,也可以使用 @class@protocol 语句。
猜你喜欢
  • 1970-01-01
  • 2010-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多