カラオケ企画やってます。NSManagedObjectModel を使用してテーブル ビューにデータをロードしたいのですが、うまくいきませんでした
まず、KBDataInitializer.m にすべての曲をロードすると、正常に動作します。それらを配列にプッシュできます。また、すべての曲名を NSlog することもできます。
@implementation KBDataInitializer
- (NSArray*) getAllSongs{
[self setupDataContext];
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc ] initWithEntityName:@"KBSong"];
NSError *fetchError;
NSArray *songs = [self.dataContext executeFetchRequest:fetchRequest error:&fetchError];
if (fetchError !=NULL){
NSLog(@"fetch data ERROR");
}
return songs;
}
しかし、HomeController のテーブルビューに各曲をロードすると何も表示されず、変数 *song を NSlog しようとするとメッセージが表示されます (データをロードできないことを意味します)。
$3 = 0x0e483d90 <KBSong: 0xe483d90> (entity: KBSong; id: 0x818b630 <x-coredata://4BA983BA-1914-47C9-A22B-0373E84EAFC8/KBSong/p1> ; data: <fault>)
However in my viewDidLoad() I can load all songs.
HomeController.h の私のコード
@interface KBHomeController : UIViewController<UITableViewDataSource,UITableViewDelegate>
{
NSArray *songs;
}
@end
これは、HomeController.m のテーブル ビューの読み込みコードです。
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view from its nib.
KBDataInitializer *data = [[KBDataInitializer alloc]init];
//Use for import updated new Songs
//[data importData];
songs = [data getAllSongs];
// This one works fine
for (KBSong *song in songs)
{
NSLog(song.name);
}
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *simpleTableIdentifier = @"SimpleTableItem";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:simpleTableIdentifier];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:simpleTableIdentifier];
}
KBSong *song = [songs objectAtIndex:indexPath.row];
cell.textLabel.text = song.name;
return cell;
}
これは私のKBSong.hです
@interface KBSong : NSManagedObject
@property (nonatomic, retain) NSNumber * code;
@property (nonatomic, retain) NSString * composer;
@property (nonatomic, retain) NSString * language;
@property (nonatomic, retain) NSString * lyric;
@property (nonatomic, retain) NSString * name;
@property (nonatomic, retain) NSNumber * volume;
@property (nonatomic, retain) NSNumber * favorite;
@end