0

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;
}
4

1 に答える 1

0

あなたの問題は、配列と辞書が適切に保持されていないことだと思います。retaininitメソッドに呼び出しを追加してみてください。

-(id) init {

    if (self=[super init]) {

        batman = [[[NSDictionary alloc] initWithObjectsAndKeys: 
                             @"name", @"Back to the Future", 
                             @"year", @"1985", nil] retain];

        superman = [[[NSDictionary alloc]initWithObjectsAndKeys:
                    @"name", @"Superman", 
                    @"year", @"1990", nil] retain];

        superheroes = [[NSArray arrayWithObjects:batman,superman, nil] retain]; 
    }
    return self;
}
于 2012-07-20T13:32:04.803 に答える