【问题标题】:Declaring classes声明类
【发布时间】:2011-06-20 11:28:40
【问题描述】:

我更新到新的 Xcode 4.2(适用于 iOS 5),但现在我的项目不再构建,出现错误:“'Category' redeclared as different symbol”。然后有许多与“请求成员“名称”不是结构或联合相关的错误,以及“无效的接收器类型“类别””等警告。

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

#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

--

#import "Category.h"

@implementation Category 

@dynamic id;
@dynamic name;
@dynamic desc;
@dynamic lastUpdate;
@dynamic articles;

@end

--

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

执行此操作的最佳方法是什么,或者需要更多信息才能找到问题。我尝试了各种不同的组合,但现在很困惑何时以及如何声明。 (我上次构建时代码运行良好)

【问题讨论】:

    标签: objective-c cocoa-touch cocoa build compiler-errors


    【解决方案1】:

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

    typedef struct objc_category *Category;
    

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

    【讨论】:

    • 感谢阿鲁曼。我对此不熟悉,我该如何更改?更改我自己的 Category 类的类名? (我对 Cocoa 比较陌生,来自 Java 世界)
    • 另外,问题是我不能那么容易地重构类,因为它是一个 CoreData 对象,当用户更新到应用程序的新版本时,更改它会破坏数据库(作为该类将意味着表名称的更改)
    • @Luuk D. Jansen 您可以创建 CoreData 模型的新版本并从旧模型迁移到新模型。
    • 当然可以,但是如何以这种方式重命名表?如果只是创建一个新版本并重命名表/类,它似乎会创建一个新版本并且不会重命名旧版本,这意味着我失去了原始表的关系/内容(并且应用程序中断)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多