-2

AFNetworking を使用してデータ ソースからセルをロードする UITableViewController があります。データは非同期で読み込まれるため、新しいデータが読み込まれたときに tableView を更新するように通知を設定します。reloadTable は、新しいデータが到着するたびに呼び出され、オブジェクトのプロパティを更新しますが、それらのプロパティは cellForRowAtIndexPath に読み込まれません。

リロードテーブルに自分のプロパティを NSLog すると、それらは正しいです。しかし、私のcellForRowAtIndexPathでnullと言う

これが私のコードです...

これにより、オブジェクトが「シフト」してデータのロードが開始され、新しいデータがロードされてテーブルが更新されたときに通知を受け取ります。

NSDictionary *params = @{@"game_id":self.gameID, @"player_id":_sharedPlayer.playerID, @"category_id":self.categoryID};

 _shifts = [[ClipShiftController alloc] init];
[_shifts fetchShifts:params];

[[NSNotificationCenter defaultCenter] addObserver:self
                                          selector:@selector(reloadTable:)
                                              name:@"clipLoaded"
                                            object:nil];

これが私のreloadTableです:

- (void)reloadTable:(NSNotification *)notif
{
    [self.tableView reloadData];
    Clip *clip = [self.shifts.shiftDataSet objectAtIndex:i];
    NSLog(@"clip counter %i",[self.shifts.shiftDataSet count]);
    NSLog(@"clip name %@",clip.name);
    i++;
}

ここに cellForRowAtIndexPath があります:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString *CellIdentifier = @"Cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier forIndexPath:indexPath];

    Clip *clip = [_shifts.shiftDataSet objectAtIndex:indexPath.row];
    NSLog(@"CELL COUNTER %i",[_shifts.shiftDataSet count]);
    NSLog(@"CLIP CELL name %@",clip.name);
    NSLog(@"row called");

    cell.textLabel.text = @"hello";
    //This is null  cell.textLabel.text = clip.name;

    return cell;
}

ここに私のコンソール出力があります

2013-08-26 12:16:50.831 One Six[15632:c07] clip counter 1
2013-08-26 12:16:50.831 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.831 One Six[15632:c07] clip counter 2
2013-08-26 12:16:50.832 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.832 One Six[15632:c07] clip counter 3
2013-08-26 12:16:50.832 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.832 One Six[15632:c07] clip counter 4
2013-08-26 12:16:50.833 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.833 One Six[15632:c07] clip counter 5
2013-08-26 12:16:50.833 One Six[15632:c07] clip name face off
2013-08-26 12:16:50.833 One Six[15632:c07] clip counter 6
2013-08-26 12:16:50.833 One Six[15632:c07] clip name face off
2013-08-26 12:16:50.834 One Six[15632:c07] clip counter 7
2013-08-26 12:16:50.834 One Six[15632:c07] clip name face off
2013-08-26 12:16:50.834 One Six[15632:c07] clip counter 8
2013-08-26 12:16:50.835 One Six[15632:c07] clip name shift
2013-08-26 12:16:50.835 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.835 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.836 One Six[15632:c07] row called
2013-08-26 12:16:50.836 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.836 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.837 One Six[15632:c07] row called
2013-08-26 12:16:50.838 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.838 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.838 One Six[15632:c07] row called
2013-08-26 12:16:50.839 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.839 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.839 One Six[15632:c07] row called
2013-08-26 12:16:50.840 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.840 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.841 One Six[15632:c07] row called
2013-08-26 12:16:50.841 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.841 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.842 One Six[15632:c07] row called
2013-08-26 12:16:50.842 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.844 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.844 One Six[15632:c07] row called
2013-08-26 12:16:50.845 One Six[15632:c07] CELL COUNTER 8
2013-08-26 12:16:50.845 One Six[15632:c07] CLIP CELL name (null)
2013-08-26 12:16:50.846 One Six[15632:c07] row called

表示されているのは、私のテーブル ビューに「hello」と表示されている 8 行です。

4

3 に答える 3

1

モデル オブジェクトでは、弱いものではなく、強いものを使用してプロパティを宣言するようにしてください。あなたのコードを見なければ、それが最も可能性の高い問題だと思いました。弱いものを使用したい場合 (例: ビュー コントローラーの IBOutlets) がありますが、データを所有するデータ オブジェクトがある場合はそうではありません。

于 2013-08-28T03:37:50.857 に答える
-1

変数「セル」を割り当てて初期化することはありません。コードを確認してください。変数「セル」はまだヌルです。

于 2013-08-26T21:07:56.860 に答える
-2

ivar (_shifts) とプロパティ (self.shifts) を混在させているためだと思います。古いバージョンの Xcode を使用している場合は、実装部分で次のコードを使用してプロパティを @synthesize する必要があります。

@synthesize shifts = _shifts;

Xcode の最新バージョンを使用している場合は、ivar _shifts 変数を宣言する必要はありません。このコードでプロパティを宣言するだけです。

@property (nonatomic, retain)  <YourObjectClass>* shifts;

ivar 変数 _shifts ではなく、self.shifts プロパティを使用したコードのすべての場所で必要です。

于 2013-08-26T19:14:06.317 に答える