NSDictionaryの配列(そのうちの5つ)を含むシングルトンクラスがあります。このデータを別のViewControllerに表示する必要があります(ストーリーボードを使用しています)。
配列からデータをプルする場合はデータにアクセスできますが、NSDictionaryの配列からデータをプルする必要があります。私はこの行を思いついた:
cell.textLabel.text = [[[[Singleton sharedInstance] movies] objectAtIndex:indexPath.row] objectForKey:@"title"];
しかし、それはうまくいかないようです。
何か案は?SingletonクラスとTableViewクラスを配置します。
Singleton.h
#import <Foundation/Foundation.h>
#import "AppDelegate.h"
@interface Singleton : NSObject {
NSDictionary *batman;
NSDictionary *superman;
NSArray *superheoes;
}
@property(nonatomic,retain) NSDictionary *batman;
@property(nonatomic,retain) NSDictionary *superman;
@property(nonatomic,retain) NSArray *superheroes;
+ (Singleton *) sharedInstance;
+ (AppDelegate *) sharedAppDelegate;
@end
Singleton.m
#import "Singleton.h"
@implementation Singleton
@synthesize batman, superman;
+ (Singleton *) sharedInstance {
//The instance of this class is store here
static Singleton *myInstance = nil;
// We check to see if an instance already exists
if (nil == myInstance) {
myInstance = [[[self class] alloc] init];
}
return myInstance;
}
-(id) init {
if (self=[super init]) {
batman = [[NSDictionary alloc] initWithObjectsAndKeys:
@"name", @"Back to the Future",
@"year", @"1985", nil];
superman = [[NSDictionary alloc]initWithObjectsAndKeys:
@"name", @"Superman",
@"year", @"1990", nil];
superheroes = [NSArray arrayWithObjects:batman,superman, nil];
}
return self;
}
#pragma mark access to app delegate etc.
+ (AppDelegate *) sharedAppDelegate; {
return (AppDelegate*)[[UIApplication sharedApplication] delegate];
}
@end
SuperheroesDatabase.m
#import "SuperheroesDatabase.h"
#import "Singleton.h"
@interface SuperheroDatabase ()
@end
@implementation MovieDatabase
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
// Configure the cell...
if(cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
cell.textLabel.text = [[[[Singleton sharedInstance] movies] objectAtIndex:indexPath.row] objectForKey:@"name"];
//cell.detailTextLabel.text = [NSString stringWithFormat:@"row %i", indexPath.row];
return cell;
}