У меня есть база данных с такими атрибутами, как url, title и timestamp. Когда я загружаю определенный контроллер представления, я извлекаю данные файла и загружаю его в таблицу. Поскольку есть несколько файлов, каждый из которых имеет 3 атрибута, я пытаюсь сохранить данные в массиве, а затем просматривать каждый объект в массиве и извлекать данные JSON. На данный момент запрос и ответ GET успешны, но массив остается нулевым. Является ли мой подход неправильным?Хранение извлеченных json-словарей в массиве, в результате чего nil
let task = session.dataTaskWithRequest(request, completionHandler: {data, response, error -> Void in
guard let data = data, response = response else
{
print("No data or response!")
return
}
let strData = NSString(data: data, encoding: NSUTF8StringEncoding)
print("Body: \(strData)", terminator: "")
do {
self.fetchedArray = try NSJSONSerialization.JSONObjectWithData(data, options: .MutableLeaves) as? NSArray
print("fetched array count is %i \(self.fetchedArray!.count)")
if let jsonArray: NSArray = self.fetchedArray{
for var i = 0; i<jsonArray.count; ++i {
let dictResult = jsonArray.objectAtIndex(i) as! NSDictionary
let recording = Recordings()
recording.trackURL = dictResult["url"] as? String
recording.trackTimestamp = dictResult["timestamp"] as? String
recording.trackAuthor = dictResult["author"] as? String
recording.trackTitle = dictResult["title"] as? String
self.recordings?.addObject(recording)
}
}
else
{
// No error thrown, but not NSDictionary
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
print("No error thrown but could not parse JSON: '\(jsonStr)'")
}
}
catch let parseError {
// Log the error thrown by `JSONObjectWithData`
print(parseError)
let jsonStr = NSString(data: data, encoding: NSUTF8StringEncoding)
print("Error thrown. could not parse JSON: '\(jsonStr)'")
}
})
task.resume()
Как теперь его выполнив второй к последнему еще о print("No error thrown but could not parse JSON: '\(jsonStr)'")
и печать всех данных.
Журнал данных до сериализации:
Response: <NSHTTPURLResponse: 0x7c349990> { URL: http://127.0.0.1:5000/auth/serve_current_user_files } { status code: 200, headers {
"Content-Length" = 239;
"Content-Type" = "application/json";
Date = "Sat, 03 Oct 2015 02:53:00 GMT";
Server = "Werkzeug/0.10.4 Python/2.7.10";
"Set-Cookie" = "session=eyJfZnJlc2giOnRydWUsIl9pZCI6eyIgYiI6Ik16RXhaRGs0TldVM1lUQmxNREJrWlRNeFpqZ3pZMkl3T1dRNE5EZzVPREk9In0sInVzZXJfaWQiOiIxIn0.CPDUjA.Mm56VPuZPIokCZVoRw7X2ySz960; HttpOnly; Path=/";
} }Body: Optional({
"recordings": [
{
"author": 1,
"timestamp": "Sun, 27 Sep 2015 17:44:54 GMT",
"title": "Test1.m4a",
"url": "/Users/allahesharghi/Desktop/Omid/pythonprojects/sound/sound/uploads/omid1/Test1.m4a"
}
]
Убедитесь, что данные верны.
In print ("Тело: \ (strData)", terminator: "") Выдает ли результат результат, что вы хотите? – wei
Единственный оператор печати, который запускается, является печатью во втором-последнем выражении else, поскольку массив выходит из nil. Данные выглядят правильными. – Brosef
Я имел ввиду перед объектами сериализации json, убедитесь, что данные верны. или разместите свои журналы здесь, чтобы было легче увидеть, что не так. – wei