データベースに登録されている店舗から人々が注文できるようにしたい 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 が既にセットアップされているときにデータが受信されることです。
この配列内の製品の量が変化するかどうかを確認するオブザーバーを追加したいと考えています。変化している場合は、テーブルビューを更新したいと考えています。私はグーグルで何時間も検索しましたが、これについてはあまり言われておらず、私にとっては何も役に立ちません。
どんな助けでも大歓迎です!前もって感謝します