NSMutableArray没有正确添加对象?

时间:2012-04-27 21:00:56

标签: iphone objective-c ios xcode nsmutablearray

我有一个按钮,可以在ButtonClick

上保存单元格的数据
- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    self.checkbox = [UIButton buttonWithType:UIButtonTypeCustom];
    CGRect checkboxRect = CGRectMake(135, 150, 36, 36);
    [self.checkbox setFrame:checkboxRect];  
    [self.checkbox setImage:[UIImage imageNamed:@"unselected@2x.png"]forState:UIControlStateNormal];
    [self.checkbox setImage:[UIImage imageNamed:@"selected@2x.png"] forState:UIControlStateSelected];
    [self.checkbox addTarget:self action:@selector(checkboxClicked:) forControlEvents:UIControlEventTouchUpInside];
    self.accessoryView = self.checkbox;
    array = [NSMutableArray array];
}
return self;
}
-(void)checkboxClicked:(UIButton *)sender{
sender.selected = !sender.selected;
UITableViewCell *cell = (AddressBookCell *)sender.superview;
if(sender.selected){
    [array addObject:cell]; 
}
}

我在我的另一个类中使用该数组,但它一直给我空数组;

这是我的另一课,它给我一个零日志。

-(void)textMessage{
/*UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Not Implmeneted Yet" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];

[alert show];
[alert release];*/
AddressBookCell *names = [[AddressBookCell alloc]init];
NSLog(@"%d",[[names array]count]);

}

![1] http://min.us/m2GMsoRap

我需要一种方法来在点击按钮时存储数据并将其传输到我的其他类。

编辑##完整代码

#import "AddressBookCell.h"

@implementation AddressBookCell
@synthesize checkbox;
@synthesize array;
@synthesize addressController;



- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];
if (self) {
    self.checkbox = [UIButton buttonWithType:UIButtonTypeCustom];
    CGRect checkboxRect = CGRectMake(135, 150, 36, 36);
    [self.checkbox setFrame:checkboxRect];  
    [self.checkbox setImage:[UIImage imageNamed:@"unselected@2x.png"]forState:UIControlStateNormal];
    [self.checkbox setImage:[UIImage imageNamed:@"selected@2x.png"] forState:UIControlStateSelected];
    [self.checkbox addTarget:self action:@selector(checkboxClicked:) forControlEvents:UIControlEventTouchUpInside];
    self.accessoryView = self.checkbox;

    array = [[NSMutableArray alloc]init];

}
return self;

}

-(void)checkboxClicked:(UIButton *)sender{
sender.selected = !sender.selected;
UITableViewCell *cell = (AddressBookCell *)sender.superview;
NSLog(@"%d'",cell.tag);

if(sender.selected){
    [array addObject:cell];  
}else{
    if([array containsObject:cell]){
        [array removeObject:cell];
    }
    NSLog(@"%d", [array count]);
}

}

现在是我的另一个班级

-(void)setUpContacts{

NSDictionary *alphabet = [[NSDictionary alloc]initWithObjectsAndKeys:[NSNumber numberWithInt:0],@"A",[NSNumber numberWithInt:1],@"B",[NSNumber numberWithInt:2],@"C",[NSNumber numberWithInt:3],@"D",[NSNumber numberWithInt:4],@"E",[NSNumber numberWithInt:5],@"F",[NSNumber numberWithInt:6],@"G",[NSNumber numberWithInt:7],@"H",[NSNumber numberWithInt:8],@"I",[NSNumber numberWithInt:9],@"J",[NSNumber numberWithInt:10],@"K",[NSNumber numberWithInt:11],@"L",[NSNumber numberWithInt:12],@"M",[NSNumber numberWithInt:13],@"N",[NSNumber numberWithInt:14],@"O",[NSNumber numberWithInt:15],@"P",[NSNumber numberWithInt:16],@"Q",[NSNumber numberWithInt:17],@"R",[NSNumber numberWithInt:18],@"S",[NSNumber numberWithInt:19],@"T",[NSNumber numberWithInt:20],@"U",[NSNumber numberWithInt:21],@"V",[NSNumber numberWithInt:22],@"W",[NSNumber numberWithInt:23],@"X",[NSNumber numberWithInt:24],@"Y",[NSNumber numberWithInt:25],@"Z", nil];


NSMutableArray *tempArray = [[NSMutableArray alloc]init];
for(int i = 0; i<=27; i++){
    [tempArray addObject:[NSNull null]];
}
Contacts *contact = [[Contacts alloc]init];
contactNumbers = [contact phoneNumbers];
for (NSDictionary* info in contactNumbers) {
    firstLetter = [info objectForKey:@"lastName"];
    int index = 27;
    if([firstLetter length] > 0){
        firstLetter =[NSString stringWithFormat:@"%C",[firstLetter characterAtIndex:0]];

        firstLetter= [firstLetter capitalizedString];

        if([alphabet objectForKey:firstLetter]){

            NSNumber *t = [alphabet valueForKey:firstLetter];
            index = [t intValue] + 1;
        }
    }
    if([tempArray objectAtIndex:index] == [NSNull null]){
        [tempArray insertObject:[NSMutableArray array] atIndex:index];
    }
    [[tempArray objectAtIndex:index] addObject:info];
}
[alphabet release];    
NSArray *alphabet2 = [[NSArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z", nil];
NSMutableArray *tempArray2 = [[NSMutableArray alloc]init];
NSMutableArray *titleTemp = [[NSMutableArray alloc]init];
int c = 0;
for(int i = 0; i<=27; i++){
    if([tempArray objectAtIndex:i] != [NSNull null]){
        if(i == 0){
            [titleTemp insertObject:@"Suggested" atIndex:c];
        }else if(i == 27){
            [titleTemp insertObject:@"Others" atIndex:c];
        }else{
            int loc = i -1;

            [titleTemp insertObject:[alphabet2 objectAtIndex:loc] atIndex:c];
        }
        [tempArray2 insertObject:[tempArray objectAtIndex:i] atIndex:c];
        c++;
    }
}
[alphabet2 release];
[tempArray release];
letterArray = tempArray2;
titlePointer = titleTemp;

}

-(void)textMessage{
/*UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"Error" message:@"Not Implmeneted Yet" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil];

[alert show];
[alert release];*/
AddressBookCell *names = [[AddressBookCell alloc]init];
savedArray = [NSArray arrayWithArray:[names array]];
NSLog(@"%@",savedArray);

}

- (void)viewDidLoad{

[super viewDidLoad];
[self setUpContacts];

indexPaths = [[NSMutableDictionary alloc]init];   

//suggestedPeople = [[NSArray alloc]initWithObjects:@"User1",@"User2",@"User3",@"User4", nil];

//set up the tableView
self.myTableView = [[UITableView alloc]initWithFrame:self.view.bounds        style:UITableViewStyleGrouped];
self.myTableView.delegate = self;
self.myTableView.dataSource = self;
self.title = @"Select Friends";
self.myTableView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.view addSubview:myTableView];
self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc]initWithTitle:@"Text"style:UIBarButtonItemStylePlain target:self action:@selector(textMessage)];

//testing section

}

3 个答案:

答案 0 :(得分:4)

当然它是空的,你在你的另一个类中分配/初始化了一个新的AdressBookCell实例,所以它的数组中没有任何东西。你需要一个属性,在你的另一个类中指向你填充数组的第一个类的实例,然后你可以使用[pointerToFirstClass数组]来获取该数组。

答案 1 :(得分:0)

看起来您正在使用手动内存管理。如果没有,您需要指定。

如果是这样,当您使用行[NSMutableArray array]创建数组时,您将创建一个自动释放的对象,该对象将在其他类尝试访问它之前释放。

您需要在创建它时保留它,并在dealloc中释放它。如果您将[NSMutableArray array]更改为[[NSMutableArray array] retain]并在您的dealloc中添加[array release]行,则在您释放拥有对象之前,数组不会消失。

答案 2 :(得分:0)

你还没有提供足够的信息来说明发生了什么,但我可以猜到......

零日志可能意味着一个空数组,或者更可能是一个零数组...试试这个:

AddressBookCell *names = [[AddressBookCell alloc]init];
NSLog(@"%@",[names array]);