Проект Objective-C с подклассом Swift UIApplication. Ошибка: класс не загружен

У меня есть проект, написанный на Objective-C, и я только что добавил подкласс UIApplication, используя Swift: RMFApplication.swift (реализация в конце поста). Тем не менее, я получаю эту ошибку:

Завершение работы приложения из-за невыполненной исключительной ситуации NSInternalInconsistencyException, причина: "Невозможно создать экземпляр экземпляра подкласса UIApplication. Класс с именем RMFApplication не загружен.'

  • В моем info.plist я правильно указал имя в NSPrincipalClass и дважды проверил его.
  • Я прочитал этот ответ, а затем посмотрел по-своему main.m который говорит: return UIApplicationMain(argc, argv, nil, NSStringFromClass([RMFAppDelegate class]));,
  • Документы для UIApplicationMain скажи что если nil определяется как третье значение, то UIApplication предполагается, но почему тогда мое сообщение об ошибке включает в себя мое имя класса? Я должен предположить nil означает, что он будет читать значение info.plist.

Примечание. Подклассы UIApplication хорошо работали с RMFApplication.h а также RMFApplication.m, Единственное, что изменилось, это переименование этих файлов и добавление RMFApplication.swift файл, который компилируется без предупреждений:

import UIKit

class RMFApplication: UIApplication {

    override func openURL(url: NSURL) -> Bool
    {
        println(url.description)
        return false;
    }
}

Я знаю, что я могу просто продолжать использовать Objective-C, но я хотел бы попытаться перейти на Swift, если эти два действительно не играют хорошо вместе.

1 ответ

Решение

Может быть, это потому, что он использует NSStringFromClass или что-то еще, так что в Swift RMFApplication " искажается " и становится чем-то вроде "somePrefix" RMFApplication (или того, что отличается от просто "RMFApplication").

Вы можете попробовать это:

@objc(RMFApplication) class RMFApplication: UIApplication

И тогда NSStringFromClass вернет просто "RMFApplication".

Другие вопросы по тегам