类'test_coredataAppDelegate'的重复接口声明

Ali*_*Ali 24 core-data objective-c

在这段代码中突然发生了两个错误 - 类'test_coredataAppDelegate'的重复接口声明 - 重新定义'struct test_coredataAppDelegate'

#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>

@interface test_coredataAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {

    ///////////////////New parts /////////////////////////
    NSManagedObjectModel *managedObjectModel;
    NSManagedObjectContext *managedObjectContext;       
    NSPersistentStoreCoordinator *persistentStoreCoordinator;

    //////////////////////////////////////////////
    UIWindow *window;
    UITabBarController *tabBarController;
}
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;

@end
Run Code Online (Sandbox Code Playgroud)

如何解决这个问题

最好的祝福

Jer*_*myP 59

有两种可能性:

  • 你有两个同名的接口.使用项目菜单选项中的Xcode查找来查找实例test_coredataAppDelegate.然后重命名其中一个接口
  • 不知何故,你设法导入.h文件两次.检查以确保您始终使用#import而不是#include.

编辑:

关于#import/的更多信息#include:

#include盲目地在#include声明的位置包含文件.这意味着如果你#include在你的文件中两次,.m你将获得该文件的两个副本.几乎所有传统的C #include文件都包含以下所有内容:

// some_file.h
#if !defined SOME_FILE_H
#define SOME_FILE_H

//  entire content of #include file

#endif
Run Code Online (Sandbox Code Playgroud)

以上有时被称为包含保护宏.

在Objective-C中,如果您#import是文件,编译器将执行检查以确保它尚未导入.因此通常省略防护装置.因此,如果你#include是一个应该被#import编辑的文件,那么两个检查都不会完成,你有时会得到重复的定义.

  • 曾以某种方式复制了额外版本的文件.谢谢. (2认同)

小智 11

发生这种情况是因为您在查找程序中有该资源的副本.没有必要在项目中添加它.您应该在查找器中找到具有相同名称的文件,并删除重复的文件.


Hot*_*ard 6

在我的情况下更换

#import "Mixpanel.h"
Run Code Online (Sandbox Code Playgroud)

#import <Mixpanel/Mixpanel.h>
Run Code Online (Sandbox Code Playgroud)

解决了错误