2015-01-14 5 views
1

Когда я пытаюсь применить NSManagedObject к моему классу модели (SCUser) при использовании RestKit 0.23.0 в Swift, возвращаемое значение равно nil. Вот операция:Кастинг NSManagedObject для подкласса возвращает nil

var urlString:String = SCApi.sharedInstance.apiUrl + "users/find_or_create?name=\(name)&email=\(email)" 
var url = NSURL(string: urlString)! 
var request = NSURLRequest(URL: url) 

var responseDescriptor = RKResponseDescriptor(mapping: SCUser.entityMapping(), method: RKRequestMethod.Any, pathPattern: nil, keyPath: "user", statusCodes: nil) 

var operation = RKManagedObjectRequestOperation(request: request, responseDescriptors: [responseDescriptor]) 
operation.managedObjectContext = RKManagedObjectStore.defaultStore().mainQueueManagedObjectContext 
operation.managedObjectCache = RKManagedObjectStore.defaultStore().managedObjectCache 

operation.setCompletionBlockWithSuccess(
    { 
     (operation:RKObjectRequestOperation!, result:RKMappingResult!) -> Void in 

     println("result: \(result.firstObject())") 
     var object:NSManagedObject = result.firstObject() as NSManagedObject 
     if let user = (object as? SCUser) { 
      println("success: \(user)") 
     } else { 
      println("failure") 
     } 
    }, 
    failure: { 
     (operation:RKObjectRequestOperation!, error:NSError!) -> Void in 
     println("error: \(error)") 
    } 
) 
operation.start() 

Когда это работает, это указывает на то, что result.firstObject() является SCUser, но не бросает его в качестве одного:

result: <NSManagedObject: 0x1740aee20> (entity: SCUser; id: 0xd000000000140000 <x-coredata://7CFB18B0-0E2D-4190-B8DF-20470425CFE3/SCUser/p5> ; data: { 
    authenticationToken = Dt7tjbLtUzSAgBdzCyC3; 
    name = g; 
    email = "[email protected]"; 
    userId = "9e99451d-ef9d-4876-bfd3-4a987c2fe316"; 
}) 
failure 

Я поставил класс SCUser и RestKit инициализации here , в случае, если это полезно.

ответ

1

Этот журнал выход

result: <NSManagedObject: 0x1740aee20> (entity: SCUser; id: 0xd000000000140000 <x-coredata://7CFB18B0-0E2D-4190-B8DF-20470425CFE3/SCUser/p5> ; data: { 
    authenticationToken = Dt7tjbLtUzSAgBdzCyC3; 
    name = g; 
    email = "[email protected]"; 
    userId = "9e99451d-ef9d-4876-bfd3-4a987c2fe316"; 
}) 

показывает, что класс на самом деле NSManagedObject, даже если объект является SCUser. Скорее всего, это связано с тем, что вы не задали имя класса в своей модели, и, предположительно, вы вручную создали файлы кода класса SCUser? Вам нужно установить имя класса (и, желательно, автоматически сгенерировать файлы классов либо с помощью Xcode, либо с помощью генератора).

Смежные вопросы