简体   繁体   中英

NSMutableArray not adding object correctly?

I have a button that saves cell's data upon 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]; 
}
}

and i use that array in my other class, but it keeps giving me empty arrays;

this is my other class, it gives me a log of Zero.

-(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

I need a way to store data upon button click and transfer it to my other classes.

EDIT## full code

#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]);
}

}

and now my other class

-(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

}

Of course it's empty, you alloc/init'd a new instance of AdressBookCell in your other class, so it doesn't have anything in its array. You need a property in your other class that points to the instance of your first class where you fill your array, and then you can use [pointerToFirstClass array] to get at that array.

It looks like you are using manual memory management. If not, you need to specify.

In the case that you are, when you create the array with the line [NSMutableArray array] , you are creating an autoreleased object that will be released before your other class tries to access it.

You'll need to retain it at the point you create it, and release it in your dealloc. If you change [NSMutableArray array] to [[NSMutableArray array] retain] and add an [array release] line to your dealloc the array won't disappear on you until you release the owning object.

you haven't included enough info to tell what is going on, but I can guess...

a log of zero could mean an empty array, or more likely a nil array... try this:

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM