2016-05-16 66 views
0

事情获得零值我所做的:路过时价值API

  1. 我有一个URL API将在我的表视图中显示的一些数据。 2.And我从我的url中获取名为“_id”的特定值,我只是将该值传递给一个自定义类对象。

  2. 然后,我将该类对象的值传递给另一个调用url的API之一。在那里我得到的值为零。

这里是保险业监督米填充数据,以我的表view.And我是从API“_id”以特定的值,我存储该值一个自定义类对象的代码:

// Showing favourites 
    func populateFavourites() 
    { 
     let token = NSUserDefaults.standardUserDefaults().valueForKey("access_token") as! String 

     let headers = ["x-access-token": token] 

     let request = NSMutableURLRequest(URL: NSURL(string: "some url")!) 
     request.HTTPMethod = "GET" 
     request.allHTTPHeaderFields = headers 

     let session = NSURLSession.sharedSession() 
     let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 

      if (error != nil) 
      { 
       print(error) 
      } 
      else 
      { 
       dispatch_async(dispatch_get_main_queue(),{ 
        if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? Dictionary<String,AnyObject> 
        { 

         print("Success Got Json Data") 

         let success = json["success"] as? Int 

         if(success == 1) 
         { 
          let jsonData = json["data"] as! NSArray 

          if(jsonData.count>0) 
          { 



           for items in jsonData 
           { 
            let BObj = items as! NSDictionary 

            let BusinessDetails = BObj.valueForKey("business_id") as! Dictionary<String,AnyObject> 

            self.FavBusinessValues.append(Businessdata(json:BusinessDetails)) 
                     print(items) 

            let FavId = BObj.valueForKey("_id") as! String 


            self.FavDelete?.FavIds = FavId 

            print(FavId) 




           } 

           self.tableView.reloadData() 

          } 
          else 
          { 
           self.CreateNoDataLabel() 
          } 
         } 
         else 
         { 
          let message = json["message"] as? String 

          print("Fav Message ",message) 

          let alert = UIAlertController(title: "Error: ", message: message, preferredStyle: UIAlertControllerStyle.Alert) 

          // add an action (button) 
          alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

          // show the alert 
          self.presentViewController(alert, animated: true, completion: nil) 
         } 
        } 
       }) 
      } 
     }) 
     dataTask.resume() 

    } 

在我上面的代码这是我在特定值“_id”,我传递给我的自定义OBJET类:

let FavId = BObj.valueForKey("_id") as! String 
self.FavDelete?.FavIds = FavId 
print(FavId) 

print(FavId)被打印的正确value.Here是我对自定义类objec存储“_id”的那个值T:

import Foundation 
class Favdelete 
{ 
     var FavIds : String? 


    init(json:String) 
    { 

     self.FavIds = json as? String 

    } 
} 

那么我的“_id”客体价值FavIds传递给我的我的API calling.That一个代码是在下面:

func apidelete() { 



      let Favouriteid = FavDelete?.FavIds 
          print(Favouriteid) 

       let userToken = NSUserDefaults.standardUserDefaults().valueForKey("access_token") as! String; 
     print(userToken) 


         let headers = [ 
          "x-access-token": userToken, 
          "cache-control": "no-cache", 
          "postman-token": "81fbd1fc-c333-3ceb-272a-a9ecffb2dad2", 
          "content-type": "application/x-www-form-urlencoded" 
         ] 




     let FBI = "favourite_id="+Favouriteid! 


     let postData = NSMutableData(data: FBI.dataUsingEncoding(NSUTF8StringEncoding)!) 

         let request = NSMutableURLRequest(URL: NSURL(string: "some url")!, 
                  cachePolicy: .UseProtocolCachePolicy, 
                  timeoutInterval: 10.0) 

     let session = NSURLSession.sharedSession() 
     let dataTask = session.dataTaskWithRequest(request, completionHandler: { (data, response, error) -> Void in 
      if (error != nil) { 
       print(error) 
      } else { 
       let httpResponse = response as? NSHTTPURLResponse 
       print(httpResponse) 
       dispatch_async(dispatch_get_main_queue(),{ 
        if let json = (try? NSJSONSerialization.JSONObjectWithData(data!, options: [])) as? Dictionary<String,AnyObject> 
        { 

         print("Success Got Json Data"); 

         let success = json["success"] as? Int; 

         var message:String = ""; 

         if(success == 1) 
         { 
          message = json["message"] as! String; 
         } 
         else 
         { 
          message = json["message"] as! String; 
         } 

         print(message); 

         let alert = UIAlertController(title: "Message from server", message: message, preferredStyle: UIAlertControllerStyle.Alert) 

         alert.addAction(UIAlertAction(title: "OK", style: UIAlertActionStyle.Default, handler: nil)) 

         self.presentViewController(alert, animated: true, completion: nil) 

        } 
       }) 

      } 
     }) 

     dataTask.resume() 




    } 

当我试图打印此:

let Favouriteid = FavDelete?.FavIds 
    print(Favouriteid) 

我马上崩溃,它说在我的控制台打印零。

任何人都可以帮助我。

更新时间:

在我的第一个功能是method.That当我得到特定值和存储值到我的自定义对象。我只是打印它。我正在逐渐零也有。

该生产线是:

let FavId = BObj.valueForKey("_id") as! String 
self.FavDelete?.FavIds = FavId 
print(self.FavDelete?.FavIds) 

其打印零

更新时间:

enter image description here

enter image description here

回答

1

虽然你有一个自定义类,你需要将其初始化使用它的 方法。没有正确的初始化,你不能设置它的属性。 因此,在ViewController中,在顶部声明该类的对象。 var FavbDelete : Favdelete? 在这一点上,你的FavDelete是零。

然后您从populateFavourites()方法中获得“_id”。您可能会从viewDidLoad()方法调用它。在那里你得到FabId为 let FavId = BObj.valueForKey("_id") as! String 但是现在你不能直接将它存储到FabDelete对象中。因为它尚未初始化。虽然Xcode不会在执行此操作时抛出任何错误,但结果值将为零。所以现在你使用你在自定义类中构建的初始化器来初始化那个对象。

self.FavDelete = Favdelete(json: FavId)

现在FavDelete对象初始化,而当你在此步骤之后调用apidelete()方法,您可以通过使用

let someVar = self.FavDelete?.FavIds 

由于访问id的值,所有这些工作正在使用NSURLSession在后台完成,请确保您在FabDelete对象初始化之前不要调用apidelete

+0

我试过,但我得到的错误是'不能调用非功能型的价值“Favdelete?”' – mark

+0

在你更新代码,您可以在此行 后打印'让FavId = BObj.valueForKey(“_ ID”)如!字符串“来查看Fav ID是否不是零? – idocode

+0

我只得到正确的ID – mark