![](/img/trans.png)
[英]Swift NSNotificationCenter add observer func in other class
[英]How to add observer for array in other class
我正在構建一個iOS應用,我希望允許人們從我的數據庫中注冊的商店中訂購商品。 為了讓我的用戶看到產品,公司等,我需要下載包含所需信息的陣列。 這是我的方法:
- (void)getOrderItems {
_dbAction = @"getOrderItems";
NSString *post = [NSString stringWithFormat:@"controller=%@&action=%@&orderNumber=%@", @"BakkerFunctions", @"getOrderItems", self.orderNumber];
NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];
NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
NSURL *url = [NSURL URLWithString:@"http://www.mysite.nl/API/"];
[request setHTTPMethod:@"POST"];
[request setValue:postLength forHTTPHeaderField:@"Content-Length"];
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Current-Type"];
[request setHTTPBody:postData];
[request setURL:url];
NSURLConnection *conn = [[NSURLConnection alloc]initWithRequest:request delegate:self];
if(conn)
{
NSLog(@"Connection Successful");
}
else
{
NSLog(@"Connection could not be made");
}
}
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData*)data {
NSArray *orderItemsFromDatabase = [[NSArray alloc] init];
orderItemsFromDatabase = [NSJSONSerialization JSONObjectWithData:data options:kNilOptions error:NULL][@"itemsFromDatabase"];
NSString *datastring = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
NSLog(@"%@ Array:%@", datastring, orderItemsFromDatabase);
//convert array from database in array of custom objects
NSMutableArray *orderItems = [[NSMutableArray alloc] init];
for (int i = 0; i < orderItemsFromDatabase.count; i++) {
[orderItems addObject:
[[Item alloc] initWithItemName:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemName"]
itemDescription:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemDescription"]
itemCode:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemCode"]
itemBarCode:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemBarCode"]
itemPrice:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemPrice"]
itemQuantity:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemQuantity"]
itemUserRemark:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemUserRemark"]
itemCompany:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"itemCompany"]
productImageNumber:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"productImageNumber"]
category:[[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"category"]
itemImage:[UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:[NSString stringWithFormat:@"http://www.imagine-app.nl/ProductImages/%@%@", [[orderItemsFromDatabase objectAtIndex:i]objectForKey:@"productImageNumber"], @".jpg"]]]]]];
}
self.orderItems = [NSArray arrayWithArray:orderItems];
}
getOrderItems
方法是我為每個訂單提供的自定義類中的方法。 當用戶選擇一個訂單時,將調用此方法來下載屬於該訂單的產品。 現在,此過程可以正常工作,但問題是,當TableView已經設置好之后,數據就可以接收了。
我想添加一個觀察者,以檢查此數組中的產品數量是否發生更改,並且如果發生更改,我想更新tableview。 我已經在Google上搜索了數小時,但是對此卻知之甚少,對我沒有什么幫助。
任何幫助將非常感激! 先感謝您
一個簡單的解決方案是使用MBProgressHUD或類似的控件,該控件將顯示一條消息,提示您正在等待下載數據。 一旦數據被下載,它將觸發一個回調,這意味着它已經下載了數據,然后您可以刷新UITableView來反映所有數據。
覆蓋orderItems
setter並在其中重新加載表格。
- (void)setOrderItems:(NSArray*)items
{
_items = items;
[self.tableView reloadData];
}
我不再添加觀察者,一旦我的自定義類完成對接收到的數據的處理,它將調用訂單視圖控制器。 這樣就可以在建立tableview之前先加載數據,並解決問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.