在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值。 有人可以帮忙吗?感谢。
答案 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
}