如何将NSMutableArray从一个类传递到另一个类?

时间:2012-01-03 04:41:25

标签: iphone ios xcode

在ClassObj.h中

@interface ClassObj : NSObject
{
     NSMutableArray *myArray;
}
@property (nonatomic, retain) NSMutableArray *myArray;

在ClassObj.m

- (void) display
{
    myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
    if (sqlite3_open([[appDelegate getDBPath] UTF8String], &database) == SQLITE_OK)
    {
        const char *sql = "select ID, title from Table";
        sqlite3_stmt *selectstmt;

        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
        {
            myArray = [[NSMutableArray alloc] init]; //inits the new array

            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
            {
                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                ClassObj *myObj = [[ClassObj alloc] initWithPrimaryKey:primaryKey];
                ClassObj.title = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                [myArray addObject:myObj];
                [ClassObj release];

            }
        }
    }    
    else
    {
        sqlite3_close(database);
    }
}

在TableViewController.m中

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    ClassObj * myArray = [[ClassArray alloc] init];

    NSLog(@"myArray count : %d", ClassObj.myArray.count);
    return ClassObj.tagArray.count;
}

我正在尝试将一个可变数组从类对象传递给TableViewContorller类。但是我试图检索的显然可变数组总是给出0值。 有人可以帮忙吗?感谢。

4 个答案:

答案 0 :(得分:2)

它为你提供了0个对象,因为你正在创建类的新对象。如果您正在使用导航控制器,那么您需要从堆栈中获取对象,请参阅此内容。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    ClassObj *obj =  (ClassObj *)[self.navigationController.viewControllers objectAtIndex:([self.navigationController.viewControllers count]-2)];

    NSLog(@"myArray count : %d", obj.myArray.count);
    return obj.myArray.count;
}

否则将ClassObj的对象作为其他类中的属性,并在切换到下一个视图时给出ClassObj的引用,并使用此属性访问该数组。

答案 1 :(得分:0)

没什么大不了的,只要参考将一个类中的对象传递给另一个类的基础知识.i.e

创建ClassObj类的对象&然后访问变量&使用的对象。属性。

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
    ClassObj * classObj = [[ClassObj alloc] init]; //Make the object of the class

    NSLog(@"%@",classObj. myArray); // Access the variable & objects using .property


    return ClassObj.tagArray.count;
}

现在查看以下代码&确保在同一个类中合成您的数组,以使其能够在另一个类中访问以消除警告:

- (void) display
{
    myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];
    if (sqlite3_open([[appDelegate getDBPath] UTF8String], &database) == SQLITE_OK)
    {
        const char *sql = "select ID, title from Table";
        sqlite3_stmt *selectstmt;

        if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
        {
            myArray = [[NSMutableArray alloc] init]; **//inits the new array**

            while(sqlite3_step(selectstmt) == SQLITE_ROW) 
            {
                NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
                ClassObj *myObj = [[ClassObj alloc] initWithPrimaryKey:primaryKey];
                ClassObj.title = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
                [myArray addObject:myObj];
                [ClassObj release];

            }
        }
    }    
    else
    {
        sqlite3_close(database);
    }
**//Print your Array over here ,to make sure of getting objects added to array.**

}

答案 2 :(得分:0)

试试这个

 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
ClassObj * myArray = [[ClassArray alloc] init];
 //added this line  
[myArray display];
NSLog(@"myArray count : %d", ClassObj.myArray.count);
return ClassObj.tagArray.count;

}

答案 3 :(得分:0)

更好的方法是在调用特定类的方法时返回数组。 你的代码将是,

- (NSMutableArray *) display
{
NSMutableArray *myArray = [NSMutableArray array];

myAppDelegate *appDelegate = (myAppDelegate *)[[UIApplication sharedApplication] delegate];

if (sqlite3_open([[appDelegate getDBPath] UTF8String], &database) == SQLITE_OK)
{
    const char *sql = "select ID, title from Table";
    sqlite3_stmt *selectstmt;

    if(sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK) 
    {
        myArray = [[NSMutableArray alloc] init]; //inits the new array

        while(sqlite3_step(selectstmt) == SQLITE_ROW) 
        {
            NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
            ClassObj *myObj = [[ClassObj alloc] initWithPrimaryKey:primaryKey];
            ClassObj.title = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
            [myArray addObject:myObj];
            [ClassObj release];

        }
    }
}    
else
{
    sqlite3_close(database);
}

return [myArray retain];

}

在你打电话给这个方法的班上,

  - (void)viewDidLoad
 {
     [super viewDidLoad];

// Do any additional setup after loading the view from its nib.

objYourArray = [[NSMutableArray alloc] init]; 

objOfDatabaseClass = [[YourDatabaseClass alloc] init];  

_tableDataArray = [objOfDatabaseClass display];

//load your tableView

}