我是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;
}
答案 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。