Класс не добавляется в NSMutableArray .. почему? - PullRequest
0 голосов
/ 20 марта 2012

У меня есть класс, определенный с пятью (5) свойствами. Я хочу взять эти свойства и поместить их в NSMutableArray (listOfSites). Это мой код:

FMResultSet *rs = [fmdb executeQuery: @"SELECT SITE_ID, SITE_DESC, DATE FROM SiteData WHERE SITE_ID <> '0'"];
while([rs next])  {
    sArray *sa = [[sArray alloc] init];
    sa.sSiteID = [rs stringForColumnIndex:0];
    sa.sJobDesc = [rs stringForColumnIndex:1];
    sa.sJobDate = [rs stringForColumnIndex:2];

    [listOfSites addObject:sa];  //  add class object to array
}
[fmdb close];

sArray (не массив, а имя класса) имеет правильное содержимое, но сообщение «addObject: sa» НЕ помещает класс в класс.

Что я делаю не так?

ОБНОВЛЕНИЕ: объявление "listOfSites":

@interface slSQLite : NSObject  {

    sqlite3 *dataBase;  //  declare pointer to database
    UILabel *status;
    BOOL newFlag;
    int siteCount;
    int seqNbr;
    NSDate *date;
    NSString *dbCmd;
    NSMutableArray *listOfSites;  //  populated by sqlite

}

Инициализация "listOfSites":

@implementation slAppDelegate  {   }

@synthesize window = _window;
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {

    slSQLite *sqlite = [[slSQLite alloc] init];  //  allocate class
    [sqlite checkForDatabase];  //  check for database

    NSMutableArray *listOfSites = [[NSMutableArray alloc] init];

    return YES; 
}

1 Ответ

1 голос
/ 20 марта 2012

Вы используете две разные переменные с именем listOfSites.Первая - локальная переменная в didFinishLaunchingWithOptions:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {
    //...
    NSMutableArray *listOfSites = [[NSMutableArray alloc] init];
    //...
}

Вторая - переменная экземпляра класса slSQLite:

@interface slSQLite : NSObject {
    // ...
    NSMutableArray *listOfSites;  //  populated by sqlite
}

Когда вы инициализируете переменную listOfSites, который находится в didFinishLaunchingWithOptions, переменная там, которая находится в slSQLite, остается неизменной и не инициализированной.

Поэтому перед использованием его следует инициализировать массив:

listOfSites = [[NSMutableArray alloc] init];
while([rs next])  {
    sArray *sa = [[sArray alloc] init];
    sa.sSiteID = [rs stringForColumnIndex:0];
    sa.sJobDesc = [rs stringForColumnIndex:1];
    sa.sJobDate = [rs stringForColumnIndex:2];

    [listOfSites addObject:sa];
}
NSLog(@"The array listOfSites contains %d items, listOfSites.count);

PS.sa это объект, а не класс.Это экземпляр класса sArray.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...