从MySQL数据库导入iOS App中的数据

时间:2017-03-25 13:33:26

标签: ios mysql swift xcode mysqli

我正在尝试从我的MYSQL数据库中读取一行并将其转换为我的应用程序中的字符串数组。

我的php文件:

<?php
$host = 'localhost';
$user = 'root';
$password = '';
$database = 'diplomarbeit_testdatenbank';

$db_link = mysqli_connect($host, $user, $password, $database);

$sql = "SELECT Kategorie FROM Kategorien WHERE Anzeige = '1'";

$result = mysqli_query($db_link, $sql);

$records = array();
$array = array();

while($row = mysqli_fetch_assoc($result)){

    $records['Kategorie'] = $row['Kategorie'];

    array_push($array, $records);
}

echo json_encode($array);

?>

...给我输出:

  

[{ “Kategorie”: “外部对象”},{ “Kategorie”: “主页”},{ “Kategorie”: “莱勒尔”},{ “Kategorie”: “Oeffnungszeiten”},{ “Kategorie”:” Orientierung “},{” Kategorie “:” Schulleitung“}]

我的应用程序中的功能(使用Xcode 8和Swift 3):

func get()
{
    do{
        let dburl = URL(string: "http://127.0.0.1/index.php")
        let dbdata = try Data(contentsOf: dburl!)

        let json = try JSONSerialization.jsonObject(with: dbdata, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]

        if let arrJSON = json["Kategorie"]
        {
            for indexx in 0...arrJSON.count-1
            {
                let aObject = arrJSON[indexx] 
                TableArray.append(aObject as! String)
            }
        }
    }
    catch let error as NSError{
        print("Failed to load: \(error.localizedDescription)")
    }
}

它没有向我显示任何错误或类似的东西。当我模拟它时,应用程序冻结在我尝试序列化的行。

显而易见的问题是:这里有什么问题?

1 个答案:

答案 0 :(得分:0)

问题在于这一行:

let json = try JSONSerialization.jsonObject(with: dbdata, options: JSONSerialization.ReadingOptions.mutableContainers) as! [String:AnyObject]

您的数据是[String:Any]词典数组。但是你将它投射到[String:AnyObject]

将该行更改为:

let json = try JSONSerialization.jsonObject(with: dbdata, options: JSONSerialization.ReadingOptions.mutableContainers) as! [[String:Any]]

当然,您必须在此之后修改其余的数据解析代码,因为您需要遍历数组以从每个字典实例中获取值。