[英]NSMutableArray not adding object correctly?
I have a button that saves cell's data upon ButtonClick 我有一个按钮,可以在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 ![1] http://min.us/m2GMsoRap
I need a way to store data upon button click and transfer it to my other classes. 我需要一种在单击按钮时存储数据并将其传输到其他班级的方法。
#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. 当然它是空的,您可以在另一个类中分配/初始化一个新的AdressBookCell实例,因此它的数组中没有任何内容。 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. 在另一个类中需要一个属性,该属性指向填充数组的第一个类的实例,然后可以使用[pointerToFirstClass 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. 在这种情况下,使用行[NSMutableArray array]
创建[NSMutableArray array]
,将创建一个自动释放的对象,该对象将在其他类尝试访问它之前被释放。
You'll need to retain it at the point you create it, and release it in your dealloc. 您需要在创建它时保留它,然后在您的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. 如果将[NSMutableArray array]
更改为[[NSMutableArray array] retain]
,并向您的dealloc添加[array release]
行,则在释放拥有的对象之前,该数组不会消失。
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: 日志为零可能意味着一个空数组,或者更可能是一个nil数组...尝试以下操作:
AddressBookCell *names = [[AddressBookCell alloc]init];
NSLog(@"%@",[names array]);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.