2016-01-08 77 views
0

我從JSON格式的MySQL數據庫中獲取數據。在Objective-C文件中,數據被修改並放入NSMutableArray(「_data」)。通過函數「itemsDownloaded」,一旦從數據庫下載完成並接收到「_data」數組,就會收到通知。如何從NSArray訪問屬性?

- (void)connectionDidFinishLoading:(NSURLConnection *)connection 
{ 
// Create an array to store the data 
NSMutableArray *_data = [[NSMutableArray alloc] init]; 

// Parse the JSON that came in 
NSError *error; 
NSArray *jsonArray = [NSJSONSerialization JSONObjectWithData:_downloadedData options:NSJSONReadingAllowFragments error:&error]; 

// Loop through Json objects, create question objects and add them to our questions array 
for (int i = 0; i < jsonArray.count; i++) 
{ 
    NSDictionary *jsonElement = jsonArray[i]; 

    // Create a new data object and set its props to JsonElement properties 
    Data *newData = [[Data alloc] init]; 
    newData.sozialversicherungsnummer = jsonElement[@"Sozialversicherungsnummer"]; 
    newData.messzeitpunkt = jsonElement[@"Messzeitpunkt"]; 
    newData.puls = jsonElement[@"Puls"]; 
    newData.sauerstoffgehalt = jsonElement[@"Sauerstoffgehalt"]; 

    // Add this question to the locations array 
    [_data addObject:newData]; 

} 

// Ready to notify delegate that data is ready and pass back items 
if (self.delegate) 
{ 
    [self.delegate itemsDownloaded:_data]; 
} 

}

我的目標是訪問屬性 「sozialversicherungsnummer」, 「messzeitpunkt」, 「PULS」 和(在上述文件) 「newData」 的 「sauerstoffsättigung」。類「數據」定義了這四個屬性。

現在我想在swift文件的圖表內顯示這些屬性。例如,我想在x軸上顯示「messzeitpunkt」,在y軸上顯示「puls」。我知道如何處理圖表,但我的問題是我不知道如何訪問swift文件內的屬性。

如果我寫幾行代碼寫進我的快捷文件:

var data: NSArray = []; 
func itemsDownloaded(items: [AnyObject]!) { 
data = items 
print("\(data)") 
} 

我得到這個在我的輸出:

(
"<Data: 0x7ca5ff60>", 
"<Data: 0x7ca5dab0>", 
"<Data: 0x7be497e0>", 
"<Data: 0x7ca42c00>" 
) 

有人可以請幫我

+0

您給了我們很多代碼,請減少您的問題只有相關的細節。 – Cristik

+0

好的,我會嘗試。 –

+0

「我在輸出中得到了這個」並且你的輸出看起來很棒。有什麼問題? – matt

回答

2

問題是你不想要一個NSArray。 Swift不知道NSArray內部是什麼。你想要一個Swift數組,即一個[Data]。這樣,Swift就知道每個項目都是一個Data,並且你可以訪問它的屬性。

你的輸出是:

(
"<Data: 0x7ca5ff60>", 
"<Data: 0x7ca5dab0>", 
"<Data: 0x7be497e0>", 
"<Data: 0x7ca42c00>" 
) 

而這正是你想要什麼,期待!您有一個由四個數據對象組成的數組。唯一的問題是你忘記告訴Swift這件事。您需要將數組鍵入[Data]或將其轉換爲[Data]

例如,如果你現在說:

func itemsDownloaded(items: [AnyObject]!) { 
    data = items 
    print("\(data)") 
} 

試試這樣說:

func itemsDownloaded(items: [AnyObject]!) { 
    let datas = items as! [Data] 
    datas.forEach {print($0.messzeitpunkt)} 
} 

這是合法的,因爲現在你已經告訴斯威夫特是什麼在數組中。你會看到你的數據在那裏,完全按照你的意圖。

+0

非常感謝你! –