我对 Objective-C(和一般的 C)和 iPhone 开发非常陌生,并且来自 java 岛,所以有一些基础知识对我来说很难学习。
我正在深入研究 iOS5 并想使用故事板。
现在我正在尝试在一个列表中设置一个列表,该列表UITableViewController
将填充未来 Web 服务返回的值。现在,我只想生成一些模拟对象并在列表中显示它们的名称以便能够继续。
来自 java,我的第一种方法是创建一个新的类,它提供一个全局可访问的方法来为我的列表生成一些对象:
#import <Foundation/Foundation.h>
@interface MockObjectGenerator : NSObject
+(NSMutableArray *) createAndGetMockProjects;
@end
实施是...
#import "MockObjectGenerator.h"
// Custom object with some fields
#import "Project.h"
@implementation MockObjectGenerator
+ (NSMutableArray *) createAndGetMockObjects {
NSMutableArray *mockProjects = [NSMutableArray alloc];
Project *project1 = [Project alloc];
Project *project2 = [Project alloc];
Project *project3 = [Project alloc];
project1.name = @"Project 1";
project2.name = @"Project 2";
project3.name = @"Project 3";
[mockProjects addObject:project1];
[mockProjects addObject:project2];
[mockProjects addObject:project3];
// missed to copy this line on initial question commit
return mockObjects;
}
这是我的 ProjectTable.h 应该控制我的 ListView
#import <UIKit/UIKit.h>
@interface ProjectsTable : UITableViewController
@property (strong, nonatomic) NSMutableArray *projectsList;
@end
最后是 ProjectTable.m
#import "ProjectsTable.h"
#import "Project.h"
#import "MockObjectGenerator.h"
@interface ProjectsTable {
@synthesize projectsList = _projectsList;
-(id)initWithStyle:(UITableViewStyle:style {
self = [super initWithStyle:style];
if (self) {
_projectsList = [[MockObjectGenerator createAndGetMockObjects] copy];
}
return self;
}
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
// only one section for all
return 1;
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
NSLog(@"%d entries in list", _projectsList.count);
return _projectsList.count;
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
// the identifier of the lists prototype cell is set to this string value
static NSString *CellIdentifier = @"projectCell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
Project *project = [_projectsList objectAtIndex:indexPath.row];
cell.textLabel.text = project.name
return cell;
}
因此,虽然我认为一切都已正确设置,但我希望 tableView 在其行中显示我的三个模拟对象。但它保持为空,并且该NSLog
方法将“列表中的 0 个条目”打印到控制台中。那么我做错了什么?
任何帮助表示赞赏。
最好的问候菲利克斯
更新 1:错过了将两个 return 语句复制到这个框(“return mockObjects”和“return cell”)中,它们已经在我的代码中,现在插入。