Ich habe gerade einen halben Tag damit verbracht, das nächste Problem zu lösen. Ich teste die CoreData mit Swift-Sprache. Folgen Sie this Tutorial alles funktioniert gut.Verwendung des nicht deklarierten Typs 'AppDelegate' Swift
Aber nach Titorial habe ich versucht, die structure und meinen Code zu ändern. Die 'src' und Gruppen darin sind Ordner, nicht nur Gruppen, die von xCode erstellt wurden.
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?)
}
}
Ich habe versucht, dieses Problem verschiedene Arten zu lösen: 1) Neues Projekt erstellen (Swift Hauptsprache) und machen die gleiche Struktur erneut (fehlgeschlagen) 2) Neues Projekt erstellen (Zielsprache C). Also ich habe die AppDelegate.h und AppDelegate.m. Fügen Sie Swift-Dateien mit Bridging-Header hinzu. Dasselbe Problem. (gescheitert)
Wirklich interessante nächste Sache. Wenn ich den nächsten Code auf den ViewController.swift setze, der automatisch mit neuem Projekt erstellt, funktioniert alles einwandfrei. Aber wenn ich diesen Code in eine andere Klasse lege. Ich habe diesen Fehler programmiert.
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
}
}()
[UPDATE 1]
Ich habe versucht, eine andere Klasse direkt im selben Ordner wie NSSAppDelegate.swift zu schaffen und jetzt alles funktioniert. Es ist jedoch immer noch ein Problem, wie kann ich die Klassen verwenden, die in anderen Ordnern gespeichert sind?
[UPDATE 2]
Gerade versucht das Gleiche in anderen Projekt zu tun. Wenn die Dateistruktur wie this ist, also AppDelegate.swift und NGDataManager.swift im gleichen Ordner sind, funktioniert alles super. ABER, wenn ich den NGDataManager.swift innerhalb des 'src' Ordners wie this (nicht nur Gruppe, Ordner) die error auftritt. Vielleicht sollte ich dafür die andere Frage stellen.
[UPDATE 3]
Ich weiß nicht, wie, aber Sie können alle vergessen, die ich in UDATE 2. Nun gesagt habe, weil das ist alles nicht funktionieren. Ich erstelle sogar ein neues Projekt mit CoreData namens "Test" und erstelle einfach eine neue Klasse namens "TestClass". Die Magie ist in der nächsten Sache: Wenn ich diesen Code in der TestClass.swift setzen
import UIKit
class TestClass: NSObject {
func someFunc() {
let appDel = UIApplication.sharedApplication().delegate as AppDelegate
}
}
der Fehler auftritt. Aber wenn ich diese Zeile in viewDidLoad in ViewController.swift setzen, die wurden automatisch generiert durch xCode
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let appDel = UIApplication.sharedApplication().delegate as AppDelegate
}
}
sie ist kein Fehler, und alles funktioniert super. Ich weiß nicht, was ich sagen soll ...
Sie können den AppDelegate-Code here sehen, aber ich habe nichts geändert, das automatisch von xCode generiert wird. Ich habe eine Einzelansicht-Anwendung mit this Einstellungen erstellt.
'NSSAppDelegate' - was soll das sein? Sicher ist es 'NSApplicationDelegate'? – Grimxn
Sie sollten Ihren Klassen nicht mit 'NS' vorangestellt werden, da Sie in Zukunft mit allerlei Problemen konfrontiert werden. – sbarow
@sbarow das ist mein Firmenpräfix NSS. Aber sicher, dass Sie Recht haben, wird das andere Präfix erstellen. Allerdings habe ich versucht, die AppDelegate, ohne das Präfix zu verwenden, zeigen Sie nur die letzte Codeversion hier. – Doshipak