Utilisation du type non déclaré 'AppDelegate' Swift

Je viens de passer une demi-journée à essayer de résoudre un autre problème.
Je suis en train de tester le CoreData l'utilisation de Swift de la langue.
Suivez cette tutoriel tout fonctionne bien.

Mais après titorial j'ai essayé de modifier le structure et mon code. Le " src " et des groupes à l'intérieur c'est des dossiers, et pas seulement les groupes créés par xCode.

NSSExpense.swift

import Foundation
import CoreData

class NSSExpense: NSManagedObject {

    @NSManaged var name: String
    @NSManaged var descr: String
    @NSManaged var value: NSNumber
    @NSManaged var isMonthly: NSNumber
    @NSManaged var payDayInMonth: NSNumber

    class func createInManagedObjectContext(moc: NSManagedObjectContext, name: String, value: Double, payDayInMonth: Int16, isMonthly: Bool, descr: String!) -> NSSExpense {
        let newExpense = NSEntityDescription.insertNewObjectForEntityForName("NSSExpense", inManagedObjectContext: moc) as NSSExpense

        newExpense.name = name
        newExpense.value = NSNumber(double: value)
        newExpense.payDayInMonth = NSNumber(short: payDayInMonth)
        newExpense.isMonthly = NSNumber(bool: isMonthly)

        if let expenseDesctiption = descr {
            newExpense.descr = expenseDesctiption
        } else {
            newExpense.descr = ""
        }

        return newExpense
    }
}

NSSDataManager.swift

import UIKit
import CoreData

class NSSDataManager: NSObject {

    class var sharedDataManager: NSSDataManager {
        struct Static {
            static var instance: NSSDataManager?
            static var token: dispatch_once_t = 0
        }

        dispatch_once(&Static.token) {
            Static.instance = NSSDataManager()
        }

        return Static.instance!
    }

    lazy var managedObjectContext : NSManagedObjectContext? = {
        //Error at the next line "Use of undeclared type 'NSSAppDelegate'"
        let appDelegate = UIApplication.sharedApplication().delegate as NSSAppDelegate

        if let managedObjectContext = appDelegate.managedObjectContext {
            return managedObjectContext
        } else {
            return nil
        }
    }()

    var expensesInMemory : [NSSExpense] {
        get {
            let fetchRequest = NSFetchRequest(entityName: "NSSExpense")
            if let fetchResults = managedObjectContext!.executeFetchRequest(fetchRequest, error: nil) as? [NSSExpense] {
                return fetchResults
            } else {
                return [NSSExpense]()
            }
        }
    }

    func addExpenseWithName(name: String, value: Double, payDayInMonth: Int16, isMonthly: Bool, descr: String!) -> NSSExpense {
        return NSSExpense.createInManagedObjectContext(managedObjectContext!, name: name, value: value, payDayInMonth: payDayInMonth, isMonthly: isMonthly, descr: descr?)
    }

}

J'ai essayé de résoudre ce problème de différentes manières:
1) Créer un nouveau projet (Swift langue principale) et de faire la même structure (échec)
2) Créer un nouveau projet (Objective-C langue principale). Donc, j'ai l'AppDelegate.h et AppDelegate.m. Ajouter à Swift de fichiers à l'aide de Transition-d'en-Tête. Le même problème. (échec)

Vraiment intéressant prochaine chose. Si je mets de côté le code pour le ViewController.swift qui crée automatiquement avec un nouveau projet tout fonctionne bien. Mais quand je mets ce code à toute autre catégorie. J'ai ce code d'erreur.

lazy var managedObjectContext : NSManagedObjectContext? = {
        //Error at the next line "Use of undeclared type 'NSSAppDelegate'"
        let appDelegate = UIApplication.sharedApplication().delegate as NSSAppDelegate

        if let managedObjectContext = appDelegate.managedObjectContext {
            return managedObjectContext
        } else {
            return nil
        }
    }()

[JOUR 1]

J'ai essayé de créer une autre classe à droite à le même dossier que NSSAppDelegate.swift et maintenant tout fonctionne très bien. Cependant il reste un problème, comment puis-je utiliser les classes qui en stockées dans d'autres dossiers?


[Mise à JOUR 2]

Juste essayé de faire la même chose dans d'autres projets.
Si la structure du fichier est comme cette donc l'AppDelegate.swift et NGDataManager.swift sont dans le même dossier tout fonctionne très bien.
MAIS, si je mets de la NGDataManager.swift à l'intérieur de la 'src' dossier comme cette (et pas seulement groupe de, dossier) le erreur se produit. Peut-être que je devrais créer l'autre question pour cela.


[JOUR 3]

Je ne sais pas comment, mais vous pouvez oublier tout ce que j'ai dit dans UDATE 2. Parce que Maintenant c'est tout pas de travail. J'ai même créer un nouveau projet avec CoreData nommé "Test" et il suffit de créer une nouvelle classe nommée "TestClass". La magie est dans la chose suivante: si j'ai mis ce code à l'intérieur de la TestClass.swift

import UIKit

class TestClass: NSObject {
    func someFunc() {
        let appDel = UIApplication.sharedApplication().delegate as AppDelegate
    }
}

l'erreur se produit. Mais si j'ai mis cette ligne dans le viewDidLoad dans ViewController.swift qui a été généré automatiquement par xCode

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let appDel = UIApplication.sharedApplication().delegate as AppDelegate
    }
}

n'est pas leur erreur et tout fonctionne très bien. Je ne sais pas quoi dire...

Vous pouvez voir l'AppDelegate code ici mais je n'ai pas modifier quoi que ce soit généré automatiquement par xCode. J'ai créé une Vue Unique de l'Application avec cette paramètres.

source d'informationauteur Doshipak