2015-05-01 1 views
0

Я пишу IOS приложение, которое получает данные от пользователя, который я хочу, чтобы хранить в двух различных моделей данных с различными целями:Как передать функцию в новый объект объекта ManagedObject модели данных?

  1. во временной модели данных (= ReconciliationModel) для синхронизации с веб-сервером, как только устройство имеет доступное интернет-соединение и
  2. в функциональной модели данных (= ProgramModel), которая является основой для работы ViewController и приложения.

Я хочу, чтобы Пользователь мог работать без подключения к Интернету.

Поэтому я пытаюсь передать новый созданный экземпляр объекта Reconciliation-ManagedObject (= reconTask) после того, как он был сохранен во вторую функцию (= apiCheckCodes). К сожалению, это не работает, и я благодарен за любую помощь. Это код:

`func setReconciliationList()->Void { 
    let appDelegate = (UIApplication.sharedApplication().delegate as AppDelegate) 
let managedObjectContext = appDelegate.managedObjectContext 
    let entityDescription = NSEntityDescription.entityForName("ReconciliationModel", inManagedObjectContext: managedObjectContext!) 
    let reconTask = ReconciliationModel(entity: entityDescription!, insertIntoManagedObjectContext: managedObjectContext!) 
    reconTask.reconStatus = false 
    reconTask.reconType = 2 
    reconTask.reconUser = inputTextField.User 
    appDelegate.saveContext()  
    // if Internet available ... 
    redeemCodes(reconTask.managedObjectContext!) 
}` 

func apiCheckCodes(context: context: NSManagedObjectContext)-> Void { 
    let fetchRequest = NSFetchRequest(entityName: "ReconciliationModel") 
    var requestError: NSError? 
    let response = context.executeFetchRequest(fetchRequest, error: &requestError) as [ReconciliationModel!] 
    let reconObject = (response as NSArray).lastObject as ReconciliationModel 

    var request = NSMutableURLRequest(URL: NSURL(string: "http://localhost:3000/apicodecheck")!) 
    let session = NSURLSession.sharedSession() 
    request.HTTPMethod = "POST" 
    var params = [ 
    "user" : ReconObject.user, 
    "status" : ReconObject.status, 
    "programGoal" : String(ReconObject.programGoal) 
    ] 
    var error: NSError? 
    request.HTTPBody = NSJSONSerialization.dataWithJSONObject(params, options: nil, error: &error) 
    request.addValue("application/json", forHTTPHeaderField: "Content-Type") 
    request.addValue("application/json", forHTTPHeaderField: "Accept") 

    // API Redeem Post request 
    var task = session.dataTaskWithRequest(request, completionHandler: { (data, response, err) -> Void in 
     var conversionError: NSError? 
     var jsonDictionary = NSJSONSerialization.JSONObjectWithData(data!, options: NSJSONReadingOptions.MutableLeaves, error: &conversionError) as? NSDictionary 
    }) 
    task.resume() 
} 

Edit: я нашел путь вокруг него с fetchRequest во 2-й функции (см. Выше) Это единственное решение?

ответ

0

Я нашел то, что я делал неправильно, и поэтому решение для работы, которое я описал в своем правлении выше, с fetchRequest больше не требуется.

Я определения 2-й функции (= apiCheckCodes) неправильно с «как ReconciliationModel» вместо того, чтобы, как это:

func verifiyScannedCode(reconObject: ReconciliationModel) {...} 

Теперь я могу назвать эту функцию с вновь созданным ManagedObject в качестве параметра

verifiyScannedCode(reconTask)