我在类中声明了@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];
}
答案 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
的内容,并检查listOfSites
中item
的长度,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}}