定义了一个属性,但无法访问它

时间:2012-03-19 22:15:21

标签: objective-c

我在类中声明了@property listOfSites。我无法从另一个类访问listOfSites,即使是'我已经完成了该类'.h文件的#import。我所做的就是将listOfSites的一个实例更改为一个属性。

这是来自另一个类(slTableViewController)的代码,我发送消息来获取listOfSites:

- (void) prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {

    if([[segue identifier] isEqualToString:@"viewSitesSegue"])  {
        NSLog(@"viewSitesSegue");

        //  get list of sites
        slSQLite *dbCode = [[slSQLite alloc] init];
        [dbCode getListOfSites];

        //  put site data into array for display
        slSQLite *item = [[slSQLite alloc] init];
        NSLog(@"\n2-The array listOfSites contains %d items", item.listOfSites.count);

以下是listOfSites的代码:

-  (void) getListOfSites {

    FMDatabase *fmdb = [FMDatabase databaseWithPath:databasePath];  // instantiate d/b
    if(![fmdb open])  {
        NSLog(@"\nFailed to open database");
        return;
    }

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

    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
    }

    NSLog(@"\nThe array listOfSites contains %d items", listOfSites.count);

    [fmdb close];
}

1 个答案:

答案 0 :(得分:2)

为了能够从其他类访问listOfSites,您需要使其成为该类的属性:

MyClass.h档案

@interface MyClass : NSObject

// ...

@property (strong, nonatomic) NSMutableArray *listOfSites;

// ...

@end

然后你必须在MyClass.m文件中合成

@interface MyClass

@synthesize listOfSites;

// ...

@end

现在,如果您在另一个类中导入MyClass.h,则可以访问该属性listOfSites。例如,在另一个文件OtherClass.m中:

#import "MyClass.h"

// ...

- (void)someMethod {
    MyClass *item = [[MyClass alloc] init];
    item.listOfSites = [[NSMutableArray alloc] init];
    // ...
}

您在发布的代码中犯了很多错误。 (即使假设您正确地将listOfSites声明为属性)。

首先,改变一行:

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

成:

listOfSites = [[NSMutableArray alloc] init];

其次,在以下几行中:

slSQLite *dbCode = [[slSQLite alloc] init]; // Create an object
[dbCode getListOfSites]; // Generate the content of listOfSites

//  put site data into array for display
slSQLite *item = [[slSQLite alloc] init]; // Create another object
NSLog(@"\n2-The array listOfSites contains %d items", item.listOfSites.count); // Log the length of listOfSites in this new object

您要为对象listOfSites生成dbCode的内容,并检查listOfSitesitem的长度,listOfSites是一个不同的对象t生成slSQLite *dbCode = [[slSQLite alloc] init]; // Create an object [dbCode getListOfSites]; // Generate the content of listOfSites NSLog(@"\n2-The array listOfSites contains %d items", dbCode.listOfSites.count); // Log the length of listOfSites in dbCode

的内容

请尝试以下方法:

{{1}}