将Core Data导入现有项目失败

6

我有一个工作空间,想要在其中添加Core Data。我进入了需要添加Core Data的项目,选择了目标,点击“Link Wit Binary Files”下的加号,添加了Core Data框架。这一步骤完成得很好,我可以构建和运行。接下来,我尝试使用以下代码:

#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版本是什么? - Dan Fairaizl
请参考以下链接:https://dev59.com/e2ox5IYBdhLWcg3wWjDQ#9263875 - Olaf
@DanFairaizl 使用Xcode 4.6.3。 - Crystal
@Mundi 是的,我正在使用ARC,这很奇怪,因为错误似乎暗示我没有。 - Crystal
4个回答

2
在我的框架搜索路径中,有一个错误的路径,一旦我将其删除,就能正确构建:
$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS.sdk/System/Library/Frameworks

1

只需将CoreData.framework添加到你的目标中,就像这样简单:

enter image description here

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 失败,退出码为1。 - Crystal
@Crystal,必须有比那更多的错误信息。构建输出是什么? - Dan Fairaizl
好的,我添加了完整的构建输出。有什么想法吗? - Crystal
@Crystal 我唯一的想法是检查框架在磁盘上的位置。在 Xcode 中的文件检查器将会显示当 CoreData.framework 被选中时的位置。我的位置是:/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CoreData.framework - Dan Fairaizl
我的看起来在同一个位置。/Applications/Xcode.app/Contents/Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS6.1.sdk/System/Library/Frameworks/CoreData.framework - Crystal
我决定重置我的工作更改,重新开始。不知何故,这一次它起作用了。奇怪。 - Crystal

0

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

  1. 从Xcode的Frameworks组中删除对CoreData.framework的引用。
  2. 在目标设置中从“链接二进制文件”中删除CoreData.framework
  3. 退出Xcode(Cmd + Q)。
  4. 在Finder中打开您的项目文件夹并删除CoreData.framework文件。
  5. 启动Xcode,打开您的项目。现在您可以在“链接二进制文件”中添加CoreData.framework
  6. 不要忘记将#import <CoreData/CoreData.h>添加到位于Supported Files中的<projectName>-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

`

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

希望这能帮助到任何阅读此文的人。


0

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

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

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


我甚至还没有开始创建实体。当我添加了import语句到.pch后,我就加入了CoreData框架,并出现了构建错误。 - Crystal
仍然可能有其他类正在使用 id。尝试进行全局文本搜索。 - Mundi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接