Dos*_*pak 13 core-data ios swift ios8.1 xcode6.1
我花了半天时间试图解决下一个问题.我正在使用Swift语言测试CoreData.按照本教程一切正常.
但在考试后我试图修改结构和我的代码.其中的'src'和组是文件夹,而不仅仅是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
}
}
Run Code Online (Sandbox Code Playgroud)
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?)
}
}
Run Code Online (Sandbox Code Playgroud)
我试图以不同的方式解决这个问题:1)创建新项目(Swift主语言)并再次制作相同的结构(失败)2)创建新项目(Objective-C主语言).所以我有AppDelegate.h和AppDelegate.m.使用Bridging-Header将其添加到Swift文件中.一样的问题.(失败)
真的很有趣的下一件事.如果我将下一个代码放到ViewController.swift中,它会自动创建新项目,一切正常.但是当我把这个代码放到任何其他类时.我编写了这个错误代码.
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
}
}()
Run Code Online (Sandbox Code Playgroud)
[更新1]
我试图在与NSSAppDelegate.swift相同的文件夹中创建另一个类,现在一切正常.但是它仍然是一个问题,我如何使用存储在其他文件夹中的类?
[更新2]
刚尝试在其他项目中做同样的事情.如果该文件结构是这样这样这样AppDelegate.swift和NGDataManager.swift在同一个文件夹中一切都很正常.但是,如果我把NGDataManager.swift像"SRC"文件夹内这个(不只是组,文件夹)的错误发生.也许我应该为此创建另一个问题.
[更新3]
我不知道如何,但你可以忘记我在UDATE 2中所说的一切.因为现在这一切都行不通.我甚至用CoreData创建了一个名为"Test"的新项目,只创建一个名为"TestClass"的新类.下一件事就是神奇:如果我将这段代码放在TestClass.swift中
import UIKit
class TestClass: NSObject {
func someFunc() {
let appDel = UIApplication.sharedApplication().delegate as AppDelegate
}
}
Run Code Online (Sandbox Code Playgroud)
发生错误.但是如果我把这行放在ViewController.swift中的viewDidLoad中,这是由xCode自动生成的
import UIKit
class ViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let appDel = UIApplication.sharedApplication().delegate as AppDelegate
}
}
Run Code Online (Sandbox Code Playgroud)
他们没有错误,一切都很好.我不知道该说些什么...
您可以在此处看到AppDelegate代码,但我没有修改xCode自动生成的任何内容.我用这个设置创建了一个单视图应用程序.
Ram*_*min 53
有可能在您创建项目时,您还创建了"{ProjectName}测试"目标.问题是AppDelegate未在"{ProjectName}测试"目标中分配成员身份.
选择AppDelegate.swift,然后在右侧检查器中单击File Inspector(纸张图标),然后确保在"Target Membership"中将项目和测试目标复选标记设置为ON.
清洁,重建.
Hod*_*son 17
如果尝试在Swift代码中访问Objective-C AppDelegate,请确保#import "AppDelegate.h"在桥接头文件中.
这让我陷入了大约一个小时: - /
代替:
let appDelegate = UIApplication.sharedApplication().delegate as NSSAppDelegate
Run Code Online (Sandbox Code Playgroud)
尝试:
let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
18593 次 |
| 最近记录: |