这与我之前提出的问题有关,但原来的问题得到了解答。希望可以打开一个新问题,如果没有,请随意将其删除。
我正在尝试使用tableviews和tabbar构建一个简单的iPhone应用程序。除了标题和需要显示的数据类型之外,每个视图都以编程方式相同。除此之外他们都表现得一样。
目前我的AppDelegate中的代码处理将viewcontrollers分发到不同的选项卡并相应地设置标题。然而,我无法弄清楚的是,如何将特定的对象数组(每个数组的每个数组不同)传递给每个分布式视图控制器,以便它被tableview使用。
希望你能帮助我。我的代码如下:
AppDelegate.h
#import <UIKit/UIKit.h>
@interface MyAppDelegate : NSObject <UIApplicationDelegate, UITabBarControllerDelegate> {
UIWindow *window;
UITabBarController *tabBarController;
}
@property (nonatomic, retain) IBOutlet UIWindow *window;
@property (nonatomic, retain) IBOutlet UITabBarController *tabBarController;
@end
AppDelegate.m
#import "RootViewController.h"
#import "MyAppDelegate.h"
@implementation MyAppDelegate.h
@synthesize window, tabBarController;
- (void)applicationDidFinishLaunching:(UIApplication *)application {
NSDictionary *row1 = [[NSDictionary alloc] initWithObjectsAndKeys:@"1", @"Id",
@"My Name", @"Name",
@"My Type", @"Type",
@"My Meta", @"Meta",
@"My Excerpt Text", @"Excerpt",
@"My Body Text", @"Body",
@"icon.jpg", @"Icon",
@"image.jpg", @"Image", nil];
NSArray *array = [[NSArray alloc] initWithObjects:row1, nil];
self.events = array;
NSArray *tableControllersConfig = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:@"test1", @"DataSource", @"Title of the Tableview", @"Title", @"icon.png", @"Icon", nil],
NSMutableArray *tableControllers = [NSMutableArray array];
for (NSDictionary *configDict in tableControllersConfig) {
RootViewController *controller = [[RootViewController alloc] initWithNibName:@"TableView" bundle:nil];
controller.tableView.delegate = controller;
controller.title = [configDict valueForKey:@"Title"];
controller.tabBarItem.image = [UIImage imageNamed: [configDict valueForKey:@"Icon"]];
[tableControllers addObject:controller];
[controller release];
}
self.tabBarController.viewControllers = [NSArray arrayWithArray:tableControllers];
[window addSubview:tabBarController.view];
[row1 release];
[array release];
}
- (void)dealloc {
[tabBarController release];
[window release];
[super dealloc];
}
@end
RootViewController实现了UITableViewDataSource协议。
答案 0 :(得分:1)
如果你的“RootViewController”是tableView的数据源(实现UITableViewDataSource协议)
在RootViewController类中创建一个NSArray ivar,说“tableDataArray”,
创建一个新的init方法,该方法将包含要在此ivar中保留的数组:
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil tableDataSource:(NSArray*)tableData {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
tableDataArray = [tableData retain];
}
return self;
}
在tableView的数据源方法中使用tableDataArray。
然后,当你在循环中创建RootViewController时,可以使用新的init方法设置tableDataArray,并且可以让每个表视图都填充不同的数组。
希望这会有所帮助
答案 1 :(得分:0)
答案取决于您的设计。
如果您正在谈论的数据在运行期间保持不变,则应将该数据保存在视图控制器中,因为它是tableviews基本配置的一部分。
如果数据超时发展,那么你应该把它放在app delegate中,然后使用一个自定义视图控制器子类,它有一个指向该数据的指针。查看Xcode中使用核心数据的模板项目之一。类之间的关系与您需要的相同,但您将使用数组而不是托管对象上下文。