Objective c 类未添加到NSMutableArray。。为什么?

Objective c 类未添加到NSMutableArray。。为什么?,objective-c,nsmutablearray,Objective C,Nsmutablearray,我有一个定义了五(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

我有一个定义了五(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];
“网站列表”的初始化:


您正在使用两个不同的变量,名为
listofsite
。第一个是
didfishlaunchingwithoptions
中的局部变量:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  {
    //...
    NSMutableArray *listOfSites = [[NSMutableArray alloc] init];
    //...
}
第二个是一个实例变量,它是class
slSQLite

@interface slSQLite : NSObject {
    // ...
    NSMutableArray *listOfSites;  //  populated by sqlite
}
初始化
didfishlaunchwithoptions
中的变量
listofsite
时,
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

的一个实例,显示声明和初始化
listOfSites
的代码。同意,您可以在问题中添加声明listOfSites的位置吗?你还泄露了sArray sa。Darren:我在使用ARC…在addObject
NSLog(@“sa%@,[sa description])之前添加一行
.sch:我在app didfishlaunchingsee中发布了我初始化数组的位置,请查看我编辑的答案。您的问题是初始化了另一个数组。即使两个数组具有相同的名称,它们也是不同的:一个是局部变量,另一个是类
slSQLite
的实例变量。当你获得“listOfSites”包含0个项目时,你是像我说的那样初始化数组,还是只是添加了
NSLog
语句?它很有效!非常感谢你…我很困惑(这对我来说很容易!)sch:还有一个问题:既然它工作了,我如何处理来自另一个类的站点列表?它必须是一个属性,而不仅仅是一个实例变量。如果需要更多帮助,请发布一个新问题。
@interface slSQLite : NSObject {
    // ...
    NSMutableArray *listOfSites;  //  populated by sqlite
}
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);