2015-05-13 26 views
5

standardına uygun NSManagedObject sınıfı nasıl kullanılır? JSFS'yi Mappable (ObjectMapper Framework) protokolünü uygulayan doğrudan eşleyen bir sınıfım var ve NSManagedObject'dan miras almaya çalışıyorum. Ben self gerektiğinden mapping(map) önce AbstractModel.swift:19:9: Use of 'self' in method call 'mapping' before super.init initializes selfMappable

Ne yazık ki süper başlatıcı (super.init(entity: NSEntityDescription, insertIntoManagedObjectContext: NSManagedObjectContext?)) diyemezsin:

class AbstractModel: NSManagedObject, Mappable { 

@NSManaged var uuid: String? 
@NSManaged var updatedAt: String? 
@NSManaged var createdAt: String? 

required init?(_ map: Map) { 
    mapping(map) 
} 

func mapping(map: Map) { 
    uuid  <- map["uuid"] 
    updatedAt <- map["updatedAt"] 
    createdAt <- map["createdAt"] 

} 
} 

Bu uygulamada sorun derleyici süper başlatıcısı önce kendini kullanan mapping(map) şikayetçi olduğunu NSManagedObjectContext'u almak için.

Bu sorunu nasıl çözmem gerekiyor?

+0

Ben ObjectMapper aşina değilim ama bir NSManagedObject can yalnızca * belirlenen başlatıcı kullanılarak oluşturulabilir. Ancak, 'context = nil' öğesini geçebilir ve nesneyi daha sonra bir içeriğe ekleyebilirsiniz. –

+1

Teşekkürler, bu şekilde uygulamaya çalışacağım. Seni bilgilendireceğim. – VincentS

cevap

6

Bu çözüm sorunu çözmek için uygun yolu olup olmadığından emin değilim ama benim sınıf bu şekilde hayata ve işe yaradı: *

class AbstractModel: NSManagedObject, Mappable { 

@NSManaged var uuid: String? 
@NSManaged var updatedAt: String? 
@NSManaged var createdAt: String? 

override init(entity: NSEntityDescription, insertIntoManagedObjectContext context: NSManagedObjectContext?) { 
    super.init(entity: entity, insertIntoManagedObjectContext: DBUtils().getManagedObjectContext()) 
} 

required init?(_ map: Map) { 
    var ctx = NSManagedObjectContext.MR_defaultContext() 
    var entity = NSEntityDescription.entityForName("AbstractModel", inManagedObjectContext: ctx) 
    super.init(entity: entity!, insertIntoManagedObjectContext: ctx) 

    mapping(map) 
} 

func mapping(map: Map) { 
    uuid  <- map["uuid"] 
    updatedAt <- map["updatedAt"] 
    createdAt <- map["createdAt"] 

} 
} 
+0

Merhaba ... Kodunuzdaki 'DBUtils' ve MR_defaultContext nedir? –

+0

Merhaba, DBUtils geçerli ManagedContext döndüren bir Util Class ve MR_defaultContext(), MagicalRecord sınıftır. – VincentS

+1

Eğer kurulum fetchrequests var ve üzgün, hayır maalesef örnek bir prroject..thnx –