簡體   English   中英

如何在其他類中為數組添加觀察者

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM