到目前为止,我有以下结构:
- Singleton NetworkingManager(登录,注销API调用)
- 子类NSManagedObject(带子扩展)
我不知道如何构建应用程序的这一部分?
我需要PersistentManager / global ObjectManagedContext吗?
以下是我的课程:
NetworkingManager(API-call)
func getContacts() {
GET(APIURL.URL_CONTACTS ,parameters: nil,
{ (operation : NSURLSessionDataTask!, response : AnyObject!) -> Void in
var contacts = [Contacts]()
contacts <<<<* response
//_sharedPersistentManager.save(contacts!)
}, { (operation : NSURLSessionDataTask!, error : NSError!) -> Void in
println("Error contacts")
})
}
模型
import Foundation
import CoreData
class Contacts: NSManagedObject, Deserializable {
@NSManaged var firstname: String
@NSManaged var lastname: String
@NSManaged var id: String
required init(data: [String: AnyObject]) {
let managedContext = (UIApplication.sharedApplication().delegate
as AppDelegate).managedObjectContext!
let entity = NSEntityDescription.entityForName("Contacts", inManagedObjectContext: managedContext)!
super.init(entity: entity, insertIntoManagedObjectContext: managedContext)
self.id <<< data["id"]
self.firstname <<< data["1"]
self.lastname <<< data["2"]
}
}
此代码失败...(Bad_ACCESS)
我在基本的课堂设计上挣扎。 你会发布一些伪代码,我可以理解基本的概念。
所有教程都解释了如何保存或获取某些数据,但不是整个应用程序的真实概念......
我正在寻找一个基本概念,如:
- 您应该实现一个Persistent Manager Singleton类
// PersistentManager
- 全局ObjectManagedContext
- 单身人士
- func save(model1:Model1)
- func save(model2:Model2)
- ....
// NetworkingManager
- 单身人士
- ......
编辑:
- 添加了一些代码
- 增加了进一步的解释
答案 0 :(得分:0)
通常,您的应用程序将拥有一个数据库(但可能有多个数据库,具体取决于您的要求)。如果我们假设您只需要一个,那么您需要创建一个Core Data数据库(持久存储),并至少需要一个NSPersistentStoreCoordinator和一个ManagedObjectContext,以便通过ManagedObjects创建和更新数据库记录。只需使用模板应用程序即可获取示例代码。
我不会尝试使用ManagedObjects init()方法来创建对象,而是在另一个类中使用辅助函数来执行此操作。创建对象时将自动调用此init()方法,以便您可以使用它为属性设置一些默认值。
下面是一个示例ManagedObject(Swift类)和一个Objective-C辅助函数。提前道歉,您需要将其转换为等效的Swift代码。
//
// DocumentCategory.swift
// Sample
//
import Foundation
import CoreData
@objc(DocumentCategoryX)
class DocumentCategoryX: NSManagedObject {
@NSManaged var image: NSData
@NSManaged var name: String
@NSManaged var sortIndex: NSNumber
@NSManaged var viewName: String
@NSManaged var documents: NSSet
}
用于创建托管对象的示例辅助函数(Core Data数据库记录)
- (NSManagedObject*)createNewCategory:(NSString*)entityName sortIndex:(int)sortIndex withName:(NSString *)name viewName:(NSString *)viewName icon:(UIImage*)icon;
{
NSManagedObject *newCat = [NSEntityDescription
insertNewObjectForEntityForName:entityName
inManagedObjectContext:[self managedObjectContext]];
[newCat setValue:[NSNumber numberWithInt:sortIndex] forKey:@"sortIndex"];
[newCat setValue:name forKey:@"name"];
[newCat setValue:viewName forKey:@"viewName"];
[newCat setValue:UIImagePNGRepresentation(icon) forKey:@"image"]; // iOS
return newCat;
}
Swift功能可以保存MOC。每当需要确保将内容写入磁盘时,请调用此方法。
// MARK: - Core Data Saving support
func saveContext () {
if let moc = self.managedObjectContext {
var error: NSError? = nil
if moc.hasChanges && !moc.save(&error) {
//FLOG("Unresolved error \(error), \(error!.userInfo)")
// Probably need a message to the user warning that a save failed!
}
}
}