我做的事情:
我有一个url api,它会在我的表视图中显示一些数据。 2.我获取名为" _id"的特定值。从我的网址,我只是将该值传递给一个自定义类对象。
然后我将该类对象值传递给我的另一个api调用url。在那里我得到的值为nil。
这是我将数据填充到我的表视图的代码。我从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()
}
在上面的代码中,我正在采取特定的价值&#34; _id&#34;我将转到我的自定义对象类:
let FavId = BObj.valueForKey("_id") as! String
self.FavDelete?.FavIds = FavId
print(FavId)
这个print(FavId)
正在打印正确的值。这是我的cutom类对象,它存储&#34; _id&#34;的值。 :
import Foundation
class Favdelete
{
var FavIds : String?
init(json:String)
{
self.FavIds = json as? String
}
}
然后我正在通过&#34; _id&#34; objet值FavIds
到我的api呼叫。这个代码在下面:
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)
我遇到了崩溃,它在我的控制台中说没有打印。
任何人都可以帮助我。!!
更新:
在我的第一个函数方法下。那就是当我得到特定值并将该值存储到我的自定义对象时。我只是打印它。我也在那里也没有。
该行是:
let FavId = BObj.valueForKey("_id") as! String
self.FavDelete?.FavIds = FavId
print(self.FavDelete?.FavIds)
它的印刷没有
更新:
答案 0 :(得分: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
由于所有这些工作都是在后台使用NSURLSession
完成的,因此请确保在apidelete
对象初始化之前不要调用FabDelete
。