2013-03-30 3 views
-3

Я создал пользовательский класс для EmployeeInfo:NSMutableArray не сохраняя данные

@interface METEmployee : NSObject 
@property (weak, nonatomic) NSString *EmpNo; 
@property (weak, nonatomic) NSString *FirstName; 
@property (weak, nonatomic) NSString *MiddleName; 
@property (weak, nonatomic) NSString *LastName; 
@property (weak, nonatomic) NSString *Department; 
@property (weak, nonatomic) NSString *HireDate; 
@property (weak, nonatomic) NSString *JobTitle; 

@property (weak, nonatomic) NSString *SupervisorNumber; 
@property (weak, nonatomic) NSString *SupLastName; 
@property (weak, nonatomic) NSString *SupFirstName; 
@property (weak, nonatomic) NSString *MobilePhone; 
@property (weak, nonatomic) NSString *EmailAddress; 
@property (weak, nonatomic) NSString *DeskPhone; 

@property (weak, nonatomic) NSString *EmployeeType; 
@property (weak, nonatomic) NSString *Location; 
@end 

Тогда на мой взгляд controller.h я создал:

NSMutableArray *theemplyees; 
@property(nonatomic, retain) NSMutableArray *theemplyees; 

Synthesize является .m:

@synthesize theemplyees 

Затем в ViewDidLoad инициируйте и вызовите, чтобы заполнить его:

theemplyees = [[NSMutableArray alloc] init]; 
[self getEmps]; 

В getEmps, добавить записи в массив:

 results = [database executeQuery:@"select * from EmpInfo order by LastName"]; 
    while([results next]) { 

     METEmployee *empInfo = [METEmployee alloc]; 
     empInfo.EmpNo = [results stringForColumn:@"EmpNo"]; 
     empInfo.FirstName = [results stringForColumn:@"FirstName"]; 
     empInfo.MiddleName = [results stringForColumn:@"MiddleName"]; 
     empInfo.LastName = [results stringForColumn:@"LastName"]; 
     empInfo.Department = [results stringForColumn:@"Department"]; 
     empInfo.HireDate = [results stringForColumn:@"HireDate"]; 
     empInfo.JobTitle = [results stringForColumn:@"JobTitle"]; 
     empInfo.SupervisorNumber = [results stringForColumn:@"SupervisorNumber"]; 
     empInfo.SupFirstName = [results stringForColumn:@"SupFirstName"]; 
     empInfo.SupLastName = [results stringForColumn:@"SupLastName"]; 
     empInfo.MobilePhone = [results stringForColumn:@"MobilePhone"]; 
     empInfo.EmailAddress = [results stringForColumn:@"EmailAddress"]; 
     empInfo.DeskPhone = [results stringForColumn:@"DeskPhone"]; 
     empInfo.EmployeeType = [results stringForColumn:@"EmployeeType"]; 
     empInfo.Location = [results stringForColumn:@"Location"]; 
     [theemplyees addObject:empInfo]; 
    } 

Все отлично работает для заполнения таблицы для первого экрана полных записей:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    METEmpTableViewCell *cell = (METEmpTableViewCell *)[tableView dequeueReusableCellWithIdentifier:@"myCell"]; 

cell.lblFirstName.text = [[theemplyees objectAtIndex:indexPath.row] valueForKey:@"FirstName"]; 
cell.lblLastName.text = [[theemplyees objectAtIndex:indexPath.row] valueForKey:@"LastName"]; 
cell.lblDepartment.text = [[theemplyees objectAtIndex:indexPath.row] valueForKey:@"Department"]; 

NSString* picName = [NSString stringWithFormat:@"%@.jpg", [[theemplyees objectAtIndex:indexPath.row] valueForKey:@"EmpNo"]]; 
@try { 
    cell.empPicture.image = [UIImage imageNamed:picName]; 
} 
@catch (NSException *exception) { 

} 
@finally { 
} 

return cell; 

}

Но если я попытаюсь прокрутить вверх или вниз по Tableview, массив говорит, что данные имеют нулевое значение ... хотя он все еще показывает количество записей. Если я изменил размер моей ячейки pn на меньшую, она заполнит больше строк (которые будут видны), но еще раз прокрутка, и они исчезнут.

Любые мысли или предложения приветствуются. Заранее спасибо за любую помощь!

Geo ...

+1

Помимо того, что все ваши свойства слабы нет ясной причины, вы забываете инициализировать после выделения. – Chuck

+0

Вау, спасибо за пометку Чак. Заставляет меня хотеть задать больше вопросов. – George

+0

Ничего себе. Я никогда не видел, чтобы кто-то так плохо реагировал на то, чтобы дать хороший совет. У вас создается впечатление, что я получаю от вас больше вопросов? Потому что, действительно, вы пришли за советом, и я дал его - просто потому, что это было полезно, но не потому, что я отчаянно надеюсь, что вы зададите больше вопросов в будущем. – Chuck

ответ

2

Вы все слабые свойства, что означает, что все строки мгновенно освобождаться, так как ничего не сохраняя их. Измените его на это и попробовать:

@property (nonatomic, strong) NSString *theString; 

Кроме того, вы хотите инициализировать NSMutableArray как так (вы упускаете метод инициализации):

NSMutableArray *array = [[NSMutableArray alloc] init]; 
+0

Ничего себе ... если бы все ответы были такими легкими! Так оно и было. Не могу поверить, что я этого не понимал. Спасибо. Я часами ломаю голову над этим. – George

+0

Он, вероятно, должен также запустить объект METEmployee. –

Смежные вопросы