1

これは私のシナリオです。ViewController1とClass1(サービスクラス)があります。

ViewController1でデリゲートとデータソースを設定して、nibにtableViewをロードしています。viewDidLoadで、別のクラス(Class1)のnetworkCall関数を呼び出しています。Class1では、応答を取得した後、応答データの配列をViewController1の関数に渡します。ここで、データはテーブルビューに入力されます。

xibでデータソースとデリゲートを接続しました。問題:ViewController1で配列として応答を取得すると、UITableViewがnilになり、reloadDataを使用できませんが、配列にサーバーからのアイテムのリストが含まれています。

これが私のコードです

ViewController1

- (void)viewDidLoad
{
    [super viewDidLoad];
    ClassA *class = [[ClassA alloc]init];
    [class getResponse];

}

//This method is calling from ClassA using delegate
-(void)responseData:(NSArray*)arrayList
{
//arrayList have response data
[tableView reloadData];//here tableView becomes nil.
}


- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
{
    return 1;
}
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    NSLog(@"array count %d",array.count);//has number of items(for me, its 3).
    return array.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {



    static NSString *CellIdentifier = @"TableView";


    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
    }


    cell.textLabel.text = @"dsds";

    return cell;
}

tableViewが初めて呼び出しています。

インターフェイスのViewController1で、プロトコルを設定しています

<UITableViewDelegate,UITableViewDataSource>
4

2 に答える 2

2

ViewController1ロードされたインスタンスを使用する代わりに、新しいインスタンスを作成しています。

次のことができます。

クラスAの場合:

インターフェース:

@interface ClassA : ...
    @property (weak) ViewController1 * vcDelegate; 
...
@end

実装:

@implementation ClassA
    @synthesize vcDelegate;
...
@end

そして代わりに

  id<ViewController1Protocol>view1 = [[ViewController1 alloc]init]; 
  [view1 responseData:objects]; 

電話

  [vcDelegate responseData:objects];

ViewController では、作成時にClassAデリゲートを自己に設定する必要があります。

 - (void)viewDidLoad
 {
      [super viewDidLoad];
      ClassA *class = [[ClassA alloc]init];

      [class setVcDelegate: self];

      [class getResponse];          
 }

これは最良の実装ではありませんが、その方法を理解できるはずです。

たとえば、プロパティはおそらく

@property (weak) id<ViewController1Protocol> vcDelegate; 
于 2012-08-23T13:51:58.847 に答える
0

tableViewxib のテーブル ビューに接続する必要があります。

画像の赤い領域は、テーブル ビューに関連付けられていません。それは空です。

ここに画像の説明を入力

于 2012-08-23T13:33:47.360 に答える