次のコードを使用してオンライン API からデータを取得しています。プレイグラウンドとアプリの両方で同じコードを使用しています。しかし、どういうわけかまったく同じコードがプレイグラウンドで機能しますが、iOS シミュレーターと iOS 9b1 iPhone の両方では機能しません (iOSlet dataSource = NSData(contentsOfURL: NSURL(string: "http://api.openweathermap.org/data/2.5/weather?id=5375480")!)
で実行されている場合、行は常に nil です。)
class WeatherParser: AnyObject {
let temp: NSNumber!
let temp_max: NSNumber!
let temp_min: NSNumber!
let humidity: NSNumber!
var weather_description: String!
init() {
var temp: NSNumber! = nil
var temp_max: NSNumber! = nil
var temp_min: NSNumber! = nil
var humidity: NSNumber! = nil
var weather_description: String!
let dataSource = NSData(contentsOfURL: NSURL(string: "http://api.openweathermap.org/data/2.5/weather?id=5375480")!)
if dataSource == nil {
print("nil")
}
if dataSource != nil {
do {
let parsedObject: AnyObject? = try! NSJSONSerialization.JSONObjectWithData(dataSource!, options: NSJSONReadingOptions.AllowFragments) as? NSDictionary
if parsedObject != nil {
let dataFromKey_main = parsedObject!["main"] as! NSDictionary
temp = dataFromKey_main["temp"] as! NSNumber
temp_max = dataFromKey_main["temp_max"] as! NSNumber
temp_min = dataFromKey_main["temp_min"] as! NSNumber
humidity = dataFromKey_main["humidity"] as! NSNumber
let weatherArrayFromSource = parsedObject!["weather"] as? NSArray
for dataInArray in weatherArrayFromSource! {
if let objs = dataInArray as? NSDictionary {
weather_description = objs["description"] as! String
}
}
}
}
}
self.temp = temp
self.temp_max = temp_max
self.temp_min = temp_min
self.humidity = humidity
self.weather_description = weather_description
}
}
Xcode 6.3.2 を使用して iOS 8 プロジェクトに同じ API URL を使用していたので、URL が機能しており、API キーとは関係がないことがわかっているため、何が起こっているのかわかりません。