Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/eclipse/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c 声明类_Objective C_Cocoa Touch_Cocoa_Build_Compiler Errors - Fatal编程技术网

Objective c 声明类

Objective c 声明类,objective-c,cocoa-touch,cocoa,build,compiler-errors,Objective C,Cocoa Touch,Cocoa,Build,Compiler Errors,我更新到了新的Xcode 4.2(适用于iOS 5),但现在我的项目不再构建,出现错误:“类别”重新声明为不同的符号”。然后会出现大量错误,如“请求成员‘名称’不是结构或联合”以及“无效接收器类型‘类别’”等警告 我想这与我如何做声明有关。关于这个(核心数据)类,我有以下声明: #import <CoreData/CoreData.h> @class Article; @interface Category : NSManagedObject { } @property (

我更新到了新的Xcode 4.2(适用于iOS 5),但现在我的项目不再构建,出现错误:“类别”重新声明为不同的符号”。然后会出现大量错误,如“请求成员‘名称’不是结构或联合”以及“无效接收器类型‘类别’”等警告

我想这与我如何做声明有关。关于这个(核心数据)类,我有以下声明:

#import <CoreData/CoreData.h>

@class Article;
@interface Category :  NSManagedObject  
{
}

@property (nonatomic, retain) NSNumber * id;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSString * desc;
@property (nonatomic, retain) NSDate * lastUpdate;
@property (nonatomic, retain) NSSet* articles;   
@end

@interface Category (CoreDataGeneratedAccessors)
- (void)addArticlesObject:(Article *)value;
- (void)removeArticlesObject:(Article *)value;
- (void)addArticles:(NSSet *)value;
- (void)removeArticles:(NSSet *)value;

@end
--

在另一个具有n:n关系的核心数据类中,我使用“@class Category;”来声明。 在我使用这个类的类中,我导入了头文件:#import“Category.h”


这样做的最佳方式是什么,或者需要更多的信息来发现问题。我尝试过各种不同的组合,但现在不知道何时以及如何声明。(上次构建时代码运行良好)

您的代码可能看到了来自
objc/runtime.h的声明:

typedef struct objc_category *Category;

按照惯例,Cocoa类的命名带有两个或三个字母的前缀,表示发起人、组织或项目。这有助于避免此类问题。

谢谢阿鲁曼。我对此不熟悉,我将如何改变这一点?更改我自己的类别类的类名?(我对Cocoa比较陌生,来自Java世界)另外,问题是我不能那么容易地折射类,因为它是一个CoreData对象,当用户更新到新版本的应用程序时,更改它会破坏数据库(因为类的名称意味着表名的更改)@Luuk D.Jansen您可以创建CoreData模型的新版本,并从旧模型迁移到新模型。当然可以,但如何以这种方式重命名表?如果只是创建一个新版本并重命名表/类,它似乎会创建一个新版本,而不会重命名旧版本,这意味着我丢失了原始表的关系/内容(并且应用程序会中断)
typedef struct objc_category *Category;