0

我正在尝试从自定义子类访问数组UITableViewCell。该数组是在我的 tableViewController 中创建的。这真让我抓狂。我一直在访问其他视图控制器的对象ViewController *vcInstance。我实际上需要从我的单元格子类编辑数组,但我什至不能NSLog从我的单元格视图控制器中编辑它。该数组完美地记录在我的 tableViewController 中。我得到的只是null细胞子类。

CustomCell.h

@property (retain, nonatomic) SongsViewController *vc;

CustomCell.m

@synthesize vc;

-(IBAction)setStateOfObjects
{
    NSMutableArray *array = [[NSMutableArray alloc] initWithArray:vc.parseTrackArray];
    NSLog(@"%@", array);
}

我也简单地尝试过:CustomCell.m

-(IBAction)setStateOfObjects
{
    SongsViewController *vc;
    NSLog(@"%@", vc.parseTrackArray);
}
4

2 回答 2

1

保留您的 SongsViewController 似乎是个坏主意。如果您使用的是 iOS 5,那可能会很弱,如果在 iOS 5 之前,请分配。您可能会创建一个保留周期(内存泄漏)。

当您在 SongsViewController 中创建 CustomCell(可能在 tableView:cellForRowAtIndexPath:) 时,您是否设置了它的 vc 属性?

[yourCell setVc:self];
于 2012-06-01T17:47:23.847 回答
1

编辑:您不太了解对象引用的工作原理。当您从数组或其他“保留”它的对象中请求一个对象时,您并没有创建一个新对象。因此,您最终不会得到“以前的对象”和“更新的对象”。考虑一下:

NSMutableDictionary *dict = [array objectAtIndex:index];
[dict setObject:@"Hello" forKey:@"Status"];
//You don't need to add *dict back to the array in place of the "old" one
//because you have been only modifying one object in the first place
[array replaceObjectAtIndex:index withObject:dict]; //this doesn't do anything

考虑到...

你这样做的方式是倒退的。在您的 UITableVieCell 子类中为您的数组创建一个属性

interface CustomCell : UITableViewCell
@property (nonatomic,retain) NSMutableArray *vcArray;
@end

#import CustomCell.h
@implementation CustomCell
@synthesize vcArray;

-(IBAction)setStateOfObjects { 
    NSMutableDictionary *dictionary = [parseTrackArrayToBeModified objectAtIndex:currentIndex]; 
    [dictionary setObject:[NSNumber numberWithBool:YES] forKey:@"sliderEnabled"]; 

    //THIS LINE IS REDUNDANT
    //[parseTrackArrayToBeModified replaceObjectAtIndex:currentIndex withObject:dictionary]; 
    //END REDUNDANT LINE

 }

//in your ViewController's delegate method to create the cell
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    //assume previous code has CustomCell created and stored in variable
    CustomCell *cell;
    cell.vcArray = self.parseTrackArray;
    return cell;
}
于 2012-06-01T17:53:57.533 回答