1

データベースに登録されている店舗から人々が注文できるようにしたい 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 が既にセットアップされているときにデータが受信されることです。

この配列内の製品の量が変化するかどうかを確認するオブザーバーを追加したいと考えています。変化している場合は、テーブルビューを更新したいと考えています。私はグーグルで何時間も検索しましたが、これについてはあまり言われておらず、私にとっては何も役に立ちません。

どんな助けでも大歓迎です!前もって感謝します

4

3 に答える 3

0

オブザーバーはもう追加しません。カスタム クラスが受信データの処理を終了するとすぐに、orders ビュー コントローラーを呼び出します。これにより、テーブルビューが設定される前にデータがロードされ、問題が解決されました。

于 2013-09-12T11:13:12.300 に答える