从另一个类访问变量

时间:2011-10-09 17:10:06

标签: objective-c ios

我是Objective-C编程的初学者,我需要从另一个类访问存储在NSMutableArray中的数据来填充TableView,但是我只得到null。 我需要访问的变量在下面的类中:

FunctionsController.h

#import <UIKit/UIKit.h>

@interface FunctionsController : UIView {
    @public NSMutableArray *placesNames;    
    NSMutableArray *placesAdresses; 
    NSMutableArray *placesReferences;
    NSMutableArray *placesLatitudes;
    NSMutableArray *placesLongitudes;
    NSArray *list;
}
@end

在另一个类中,我正在尝试访问数据,但结果只得到null。

SimpleSplitController.m

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {

    static NSString *CellIdentifier = @"Cell";

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero reuseIdentifier:CellIdentifier] autorelease];
    }
    FunctionsController *arrays = [[FunctionsController alloc] init];
    NSMutableArray *names = [arrays->placesNames];

    // Set up the cell...
    cell.textLabel.text = [names objectAtIndex:indexPath.row];
    cell.textLabel.adjustsFontSizeToFitWidth = YES;
    cell.textLabel.font = [UIFont systemFontOfSize:12];
    cell.textLabel.minimumFontSize = 10;
    cell.textLabel.numberOfLines = 4;
    cell.textLabel.lineBreakMode = UILineBreakModeWordWrap;

return cell;    
}

2 个答案:

答案 0 :(得分:3)

问题在于:

FunctionsController *arrays = [[FunctionsController alloc] init];
NSMutableArray *names = [arrays->placesNames];

首先,您要再次分配FunctionsController。这为您提供了一个干净的新实例,其变量中没有数据。如果'init'没有把它放在那些变量中,你就不会从中得到任何东西。

我看到的第二个问题是你直接访问变量。我会改用属性。您可以在FunctionsController.h中声明一个属性:

@property (nonatomic, retain) NSMutableArray *placesNames;

并将其添加到您的FunctionsController.m:

@synthesize placesNames;

然后通过这样做来访问该属性:

NSMutableArray *names = arrays.placesNames;

最后,我建议您使用Core Data来存储该数据,因为它似乎应该属于SQL数据库。有关核心数据的更多信息,请访问:http://developer.apple.com/library/ios/#DOCUMENTATION/DataManagement/Conceptual/iPhoneCoreData01/Introduction/Introduction.html

答案 1 :(得分:1)

这是你的问题:

FunctionsController *arrays = [[FunctionsController alloc] init];
NSMutableArray *names = [arrays->placesNames];

除非你在FunctionsController的init方法中设置placesNames,否则它将为空或为零。

在objective-c上查看singletons