You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Objective-C视图控制器中引用Swift AppDelegate报错,求解决方法

解决Objective-C中引用Swift AppDelegate的"Unknown type name"错误

嘿,我来帮你搞定这个问题!你遇到的"Unknown type name"错误,主要是因为Objective-C没有正确识别到Swift写的AppDelegate类,下面是一步步的解决办法:

1. 确保Swift AppDelegate对Objective-C可见

Swift类默认不会暴露给Objective-C,你需要在AppDelegate类上添加@objcMembers修饰符,这样它的所有属性和方法都会对Objective-C开放。修改你的Swift AppDelegate代码:

@objcMembers class AppDelegate: UIResponder, UIApplicationDelegate {
    // 你的CoreData相关代码,比如persistentContainer
    let persistentContainer: NSPersistentContainer = {
        let container = NSPersistentContainer(name: "YourDataModelName")
        container.loadPersistentStores(completionHandler: { (storeDescription, error) in
            if let error = error as NSError? {
                fatalError("Unresolved error \(error), \(error.userInfo)")
            }
        })
        return container
    }()
    
    // 其他AppDelegate方法...
}

如果不想开放所有成员,也可以单独给需要被Objective-C访问的属性(比如persistentContainer)添加@objc修饰符。

2. 导入正确的自动生成头文件

你不需要直接导入AppDelegate.swift,Objective-C调用Swift代码时,需要导入Xcode自动生成的项目名-Swift.h文件。注意项目名里的连字符会被替换成下划线,比如你的项目是SPOTEVENT-EventNotificationApp,对应的头文件应该是:

#import "SPOTEVENT_EventNotificationApp-Swift.h"

这个文件是Xcode自动生成的,你可以在项目的Build Settings里找到"Objective-C Generated Interface Header Name"选项,确认它的名称是否正确。

3. 修正获取AppDelegate实例的代码

现在你可以正确获取AppDelegate实例并拿到CoreData的上下文了,修正后的代码如下:

// 在你的Objective-C视图控制器方法内部
AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
NSManagedObjectContext *context = appDelegate.persistentContainer.viewContext;

// 接下来就可以用context来处理NSMutableArray里的数据,存入CoreData了

4. 额外的排查步骤

  • 执行清理项目(快捷键Cmd+Shift+K),然后重新编译,有时候缓存会导致类型识别失败
  • 确认你的CoreData数据模型名称和AppDelegate里的NSPersistentContainer初始化名称一致
  • 检查Build Settings里的"Defines Module"选项是否设置为YES,这是Swift和Objective-C互操作的必要条件

内容的提问来源于stack exchange,提问作者FarasatNiazi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 03:23:55