无法将数据绑定到表视图

时间:2010-06-11 14:30:11

标签: iphone

我从Json URL检索数据并将其显示在表格视图中。我还在表格视图中包含了一个按钮。单击该按钮时,必须将数据传输到另一个表视图。问题是我可以将数据发送到视图并可以在标签上显示。但我无法将数据绑定到表格视图......以下是一些代码片段......

购买按钮......

-(IBAction)Buybutton{
    Product *selectedProduct = [[data products]objectAtIndex:0];    
    CartViewController *cartviewcontroller = [[[CartViewController alloc] initWithNibName:@"CartViewController" bundle:nil]autorelease];    
    cartviewcontroller.product= selectedProduct;
    [self.view addSubview:cartviewcontroller.view]; 
}

... CartView

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad 
{
    [super viewDidLoad];    
    data = [GlobalData SharedData]; 
    NSMutableArray *prod =[[NSMutableArray alloc]init];     
    prod = [data products]; 
    for(NSDictionary *product in prod){
        Cart *myprod = [[Cart alloc]init];
        myprod.Description = [product Description];

        myprod.ProductImage =[product ProductImage];
        myprod.ProductName = [product ProductName];
        myprod.SalePrice = [product SalePrice];

        [data.carts addObject:myprod];
        [myprod release];
    }
    Cart *cart = [[data carts]objectAtIndex:0];
    NSString *productname=[cart ProductName];
    self.label.text =productname;

    NSLog(@"carts");
}

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
   return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return [data.carts count];
}
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath  {
    return 75;
}

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

    ProductCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if(cell ==nil)
    {
        cell = [[[ProductCell alloc]initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]autorelease];
    }
    NSUInteger row = [indexPath row];
    Cart *cart = [[data carts]objectAtIndex:row];
    cell.productNameLabel.text = [cart ProductName];

    return cell;    
}

我在控制台中也收到以下错误

2010-06-11 18:34:29.169 navigation[4109:207] *** -[CartViewController tableView:numberOfRowsInSection:]: message sent to deallocated instance 0xcb4d4f90

2 个答案:

答案 0 :(得分:0)

您的视图控制器已自动释放,这就是您在控制台中出现错误的原因。

CartViewController *cartviewcontroller =
    [[[CartViewController alloc] 
            initWithNibName:@"CartViewController" 
            bundle:nil] ***autorelease***];

您应该将视图控制器存储在成员变量中。

答案 1 :(得分:0)

这是折旧的:

cell = [[[ProductCell alloc]initWithFrame:CGRectZero reuseIdentifier:CellIdentifier]autorelease];

请改用initWithStyle:reuseIdentifier:

自动释放不是一种便利功能。它有特定的用途。当您立即将对象移交给另一个外部对象时,您应该只使用它。不要使用autorelease,除非发送对象更长时间关心接收对象是否存在或死亡。

一个好的经验法则是,如果您在发送对象中再次引用接收对象,请不要自动释放接收对象。