gpt4 book ai didi

ios - 将值传递给 api 时得到 nil 值

转载 作者:行者123 更新时间:2023-11-29 00:59:03 25 4
gpt4 key购买 nike

我做过的事情:

  1. 我有一个 url api,它将在我的 TableView 中显示一些数据。2.我从我的 url 中获取名为“_id”的特定值,然后将该值传递给一个自定义类对象。

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

这是将数据填充到我的 TableView 的代码。我从 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”,并且传递给了我的自定义对象类:

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

print(FavId) 正在打印正确的值。这是我的自定义类对象,它存储“_id”的值:

import Foundation
class Favdelete
{
var FavIds : String?


init(json:String)
{

self.FavIds = json as? String

}
}

然后我将“_id”对象值 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)

我可能会崩溃,它说我的控制台中没有打印。

有谁能帮帮我吗!!

更新:

在我的第一个函数方法下。那是当我获得特定值并将该值存储到我的自定义对象时。我只是打印它。我在那里也得到 nil。

行是:

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

它的打印为零

更新:

enter image description here

enter image description here

最佳答案

虽然您有一个自定义类,但您需要对其进行初始化以使用其方法。如果没有正确的初始化,您将无法设置它的属性。所以在 ViewController 中,在顶部声明该类的对象。var FavbDelete : Favdelete?此时,您的 FavDelete 为零。

然后您从 populateFavourites() 方法中获取“_id”。您可以从 viewDidLoad() 方法调用它。在那里你得到 FabId 作为让 FavId = BObj.valueForKey("_id") 为!字符串但是现在不能直接存入FabDelete对象。因为还没有初始化。虽然当你这样做时 Xcode 不会抛出任何错误,但结果值为 nil。因此,现在您可以使用在自定义类中构建的初始化程序来初始化该对象。

self.FavDelete = Favdelete(json: FavId)

现在 FavDelete 对象已经初始化,当你在这一步之后调用 apidelete() 方法时,你可以通过使用访问 id 的值

let someVar = self.FavDelete?.FavIds

因为所有这些工作都是在后台使用 NSURLSession 完成的,请确保您没有在 FabDelete 对象被调用之前调用 apidelete初始化。

关于ios - 将值传递给 api 时得到 nil 值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37249926/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com