【问题标题】:Importing Core Data to existing project fails将核心数据导入现有项目失败
【发布时间】:2013-09-11 17:26:02
【问题描述】:

我有一个工作区,我正在尝试向其中添加核心数据。我去了我想要添加核心数据的项目,选择了目标,点击 Link Wit Binary Files 下的 + 号并添加了核心数据框架。那部分工作正常。我可以构建和运行。当我尝试下一个并使用这一行时:

#import <CoreData/CoreData.h>

我收到构建错误。这些构建错误如下所示:

"ARC Semantic Issue"
Pointer to non-const type 'id' with no explicit ownership

这些错误存在于

NSEntityDescription.h
NSManagedObjectModel.h
NSMnagedObject.h
NSManagedObjectContext.h
NSPersistentStore.h

有谁知道为什么我无法将 Core Data 导入现有的 iOS 项目?提前致谢!

【问题讨论】:

  • 你使用的是什么版本的 Xcode?​​span>
  • @DanFairaizl 使用 Xcode 4.6.3
  • @Mundi 是的,我正在使用 ARC,这很奇怪,因为错误似乎暗示我不是。

标签: ios core-data


【解决方案1】:

在我的框架搜索路径中,我有一个错误的路径,一旦我删除它就会正确构建:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

【讨论】:

    【解决方案2】:

    应该像将 CoreData.framework 添加到您的目标一样简单:

    单击Linked Frameworks and Libraries 下的加号按钮 (+)

    然后在您的前缀文件(在本例中为 Tabs-Prefix.pch)中的 #ifdef __OBJC__ 声明中:

    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        #impport <CoreData/CoreData.h> //Added core data here
    #endif
    

    如果这不起作用,可能是您安装了旧版本的 Xcode 并且路径混乱了。它可能正在尝试导入较旧的框架。

    【讨论】:

    • @DanFairazl 这就是我尝试过的。但我得到了这些错误。我在最新的开发人员预览版中尝试过,现在我得到了,Command /Applications/Xcode5-DP6.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/clang failed with exit code 1
    • @Crystal 必须有比这更多的错误消息。构建输出是什么?
    • 好的,我添加了完整的构建输出。有什么想法吗?
    • @Crystal 我唯一的另一个想法是检查框架在磁盘上的位置。 Xcode 中的文件检查器将在选择 CoreData.framework 时向您显示。我的位于:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CoreData.framework
    • 我的看起来在同一个地方。 /Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CoreData.framework
    【解决方案3】:

    我认为这可能与您的实体定义有关。您是否有可能声明了使用属性名称id 的实体?这通常是模型子类中的NSNumber 类型,即*id

    似乎在这种情况下,编译器并没有抱怨类文件中的*id,而是指示了头文件中的id,这令人困惑。

    --> 尝试更改属性名称。

    【讨论】:

    • 我什至还没有开始创建实体。将导入语句添加到 .pch 后,我添加了 CoreData 框架和上帝构建错误。
    • 不过,其他类可能正在使用id。尝试全局文本搜索。
    【解决方案4】:

    我遇到了同样的问题。通过以下步骤解决:

    1. 从 Xcode 的 Frameworks 组中删除对 CoreData.framework 的引用。
    2. 从目标设置中的“将二进制文件与库链接”中删除 CoreData.framework
    3. 退出 Xcode (Cmd + Q)。
    4. 在 Finder 中打开您的项目文件夹并删除 CoreData.framework 文件。
    5. 启动 Xcode,打开您的项目。现在您可以在“Link Binary with Libraries”中添加CoreData.framework
    6. 不要忘记将#import &lt;CoreData/CoreData.h&gt; 添加到位于受支持文件的&lt;projectName&gt;-Prefix.pch 中。我的前缀标题看起来像这样:

    `

    #import <Availability.h>
    
    #ifndef __IPHONE_5_0
    #warning "This project uses features only available in iOS SDK 5.0 and later."
    #endif
    
    #ifdef __OBJC__
        #import <UIKit/UIKit.h>
        #import <Foundation/Foundation.h>
        #import <CoreData/CoreData.h>
    #endif
    

    `

    我不知道项目目录中任何文件的存在如何影响编译错误,但它对我有用。

    希望这对阅读它的人有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 1970-01-01
      • 2011-10-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多