Определил свойство, но не могу получить к нему доступ - PullRequest
0 голосов
/ 20 марта 2012

У меня есть @property listOfSites, объявленный в классе. Я не могу получить доступ к listOfSites из другого класса, даже если файл «.himport of the class» .h. Все, что я сделал, это изменил экземпляр 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 Ответ

2 голосов
/ 20 марта 2012

Чтобы получить доступ к 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 и проверяете длину listOfSites в item, который является другим объектом и для которого вы не сделалине генерировать содержимое listOfSites.

Попробуйте выполнить следующее:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...