0

我在 viewcontrolller.m 中设置了一个 NSMutableArray

barcodeArray = [[NSMutableArray alloc] init];

在 viewcontroller.h 中是这样的:

@interface SecondViewController : UIViewController <UITableViewDelegate, UITableViewDataSource> {

    NSString *string;
    NSString *barcode;
    NSArray *array;
    NSMutableArray *barcodeArray;

}

比我添加这样的对象:

if ([barcodeArray indexOfObject:barcode] != NSNotFound) {
    NSLog(@"%@",barcode);
    NSLog(@"object zit er al in");

}
else {
    [barcodeArray addObject:barcode];
    [_tableView reloadData];
    NSLog(@"%@",barcodeArray);
    NSLog(@"object zit er nog niet in");

}

当我设置 numberOfRowsInSection 返回 [barcodeArray count]; 未调用函数 cellForRowAtIndexPath。就像barcodeArray 计数为空一样。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {

    return [barcodeArray count];

}

当我将 numberofRowsinSection 设置为返回 1 时;只是为了测试..我得到一个带有(null)的单元格:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSLog(@"aangeroepen");
    static NSString *CellIdentifier = @"Cell";

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

    // Set up the cell...

        cell.textLabel.text = [NSString stringWithFormat:@"%@",[barcodeArray objectAtIndex:indexPath.row]];
NSLog(@"%@", cell.textLabel.text);


    return cell;
}

这是我的日志:

2013-01-17 07:57:04.139 Scanner[21865:c07] (
    123456
)   **// NSMutableArray when i add the barcode**
2013-01-17 07:57:04.140 Scanner[21865:c07] object zit er nog niet in
2013-01-17 07:57:05.485 Scanner[21865:c07] viewdidload
2013-01-17 07:57:05.488 Scanner[21865:c07] aangeroepen
2013-01-17 07:57:05.489 Scanner[21865:c07] (null) **// NSMutableArray in cell.textLabel.text**

编辑:

    cell.textLabel.text = [NSString stringWithFormat:@"%@",[barcodeArray objectAtIndex:indexPath.row]];
NSLog(@"celltext:%@", cell.textLabel.text);
    NSLog(@"barcodearray%@", [barcodeArray objectAtIndex:indexPath.row]);
    NSLog(@"objectatindex:0:%@", [barcodeArray objectAtIndex:0]);
    NSLog(@"indexpath.row:%d", indexPath.row);

Log:



2013-01-17 08:27:28.838 Scanner[21978:c07] celltext:(null)
2013-01-17 08:27:28.839 Scanner[21978:c07] barcodearray(null)
2013-01-17 08:27:28.839 Scanner[21978:c07] objectatindex:0:(null)
2013-01-17 08:27:28.839 Scanner[21978:c07] indexpath.row:0
4

2 回答 2

1

我有一种非常强烈的感觉,即您barcodeArray的方法中只有 if/else 语句的本地范围。我认为您需要保留barcodeArray, 因为它在您的其他方法中为空。

你能NSLog(@"%d", [barcodeArray count]);在你的numberOfRowsInSection委托方法中做一个并显示打印的内容吗?这将有助于确认您分配和保留数组的方式是否存在问题。如果那是问题......那么在你的头文件中,你会写,

@property (strong, nonatomic) NSMutableArray* barcodeArray;在你的实现文件中,你会写`@synthesize barcodeArray = _barcodeArray;

然后,你会这样做,self.barcodeArray = [NSMutableArray alloc] init];

在你使用的任何地方barcodeArray,在它之前添加 self 。通过保留对象(使用头文件中的属性...retain = strong),您现在可以访问整个类。cellForRowAtIndexPath在你的andnumberOfRows方法中它不应该再为空了。

编辑:

在你的代码中,你正在做

[barcodeArray addObject:barcode];

这应该是

[self.barcodeArray addObject:barcode];

您的代码中不应该有任何地方barcodeArray——您应该只有self.barcodeArray.

于 2013-01-17T07:14:21.930 回答
0

条形码为 nil 。在条形码中设置一些东西,即;barCode = @"11225544";并尝试。

于 2013-01-17T07:13:56.270 回答