我會盡量保持這個儘可能短..我正在做一個應用程序的iPhone需要能夠存儲從網絡上的一些圖像。圖像的URL(以及其他數據)存儲在MySQL服務器的一個表中。從那裏開始,我用JSON解析了表格,併成功將其序列化以顯示在應用程序的UITableView中。現在,每個單元格都顯示錶格中imageurl字段的圖像,以及表格中標題字段的圖像標題(從MySQL-> json.php-> NSArray(json)(objectAtIndex)等等。從網絡上的iPhone應用程序中存儲圖像和數據的最有效方法是什麼?
在這一點上,每次應用程序啓動時,它每次都從JSON.php中獲取來自url的所有信息,我認爲它每次都會下載圖像。我覺得這樣的工作比必要的工作要多,但是,由於數據庫會根據數據的獲取位置進行非正式更新,所以僅僅下載一次信息就不夠好。
問題1: 我需要一個應用程序「詢問」.php是否與JSON顯示的數據完全相同的解決方案。我能想到的最合乎邏輯的方式是在.php中添加一個「date」字段,顯示數據上次更新的日期,如果應用程序具有來自同一日期的數據,則不會發生任何反應,但如果php-副本日期比應用程序日期更新,那麼它必須能夠刪除所有存儲的數據,並用新的JSON數據替換。
問題2: JSON數據是iPhone中的NSArray,「Image」字段只是圖片的網址(www.example.com/image.png),而不是實際的圖片。我如何下載這些圖像並將它們保存在iPhone上,直到通過JSON獲得新的「版本」數據?
獎勵問題: 我現在使用的方法是在滾動時使UITableView滯後。我不是專業人士,但我已經閱讀了幾個地方,這可能是由於內存泄漏導致的,我還沒有完全明白這意味着什麼。我還讀到它可能是因爲我可能爲每個單元實例化對象,而不是一次並重新使用它。
底線: 我的目標是讓應用程序在第一次應用程序啓動時從json.php下載所有數據一次,並在稍後啓動時檢查版本是否正確。如果正確,那麼就不需要下載,只需使用存儲的包含JSON數據的對象,並從URL下載圖像文件即可下載首次啓動。如果不正確,請刪除所有先前存儲的圖像並清除json對象,然後導入新更新的json對象,並從iPhone上的某個位置的jsonobject中保存來自圖像url的圖像。
注意:更新數據(即添加一個額外的圖像,這是所做的所有更改)不是一個解決方案,在我眼中這不是一個可能性。當此數據庫中有更新時,我需要存儲在手機中的所有信息清除,然後重新下載所有信息。這是因爲我放入數據庫的信息是從另一個網站解析出來的,如果新圖像或數據更新包含某些其他字段的更改,那麼我寧願調整數據庫以適應(通過json.php)而不是一直髮布應用程序的更新。
這是錯誤的方法?這可能嗎?非常感謝幫助!
編輯從這裏和那裏 JSON-東西..
#define kURL [NSURL URLWithString:@"www.example.com"]
NSData* data = [NSData dataWithContentsOfURL: kURL];
NSArray *json = [NSJSONSerialization JSONObjectWithData: data options: NSJSONReadingMutableContainers error: &e];
NSDictionary *info = [json objectAtIndex:indexPath.row];
cell.textLabel.text = [info objectForKey:@"Name"]; // ±Same for url
這是從類中的不同地方提取的,所以他們可能不喜歡這個工作完全..
EDIT
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
}
// Configure the cell...
info = [json objectAtIndex:indexPath.row];
cell.textLabel.text = [info objectForKey:@"Name"];
NSString* imageURL = [info objectForKey:@"Image"];
NSURL *URLimage = [NSURL URLWithString:imageURL];
NSData* imageData = [NSData dataWithContentsOfURL:URLimage];
UIImage* images = [[UIImage alloc] initWithData:imageData];
cell.imageView.image = images;
return cell;
}
了Stian。
嗯..嗯,這基本上是我有: 的#define KURL [NSURL URLWithString:@「WWW .example.com「] NSData * data = [NSData dataWithContentsOfURL: kURL];我們可以使用NSDictionary * info = [json objectAtIndex:indexPath.row];我們可以使用NSDictionary * cell.textLabel.text = [info objectForKey:@「Name」]; //±相同的網址 我應該改用別的東西嗎? – Sti 2012-07-13 17:34:51
有點難以閱讀..我會更新帖子。 – Sti 2012-07-13 17:42:18
你在哪裏創建單元格? – 2012-07-13 17:46:40