다른 유사한 것들이 많이 있기 때문에이 질문을하는 것이 싫어 만 계속 지나간 후 내 문제가 무엇인지 알 수 없습니다. 대부분의 답변.CoreData : 오류 : NSManagedObject 클래스의 'SCTrack'에서 지정된 초기화 프로그램을 호출하지 못했습니다.
VC가 두 개 있습니다. VC1에는 음악 서비스에서 가져온 노래 목록이 들어 있습니다. VC2는 VC1에서 선택한 노래 목록을 포함합니다. VC2는 기본적으로 재생 목록입니다.
다음과 일치하도록 엔티티 이름과 클래스를 설정했습니다. SCTrack.
@interface SCTrack : NSManagedObject
@property (strong, nonatomic) NSString* title;
@property (strong, nonatomic) NSString* stream_url;
SCTrack.m : 여기 내 SCTrack.h이다에서 내 VC1.m에서
#import "SCTrack.h"
@implementation SCTrack
@dynamic title;
@dynamic stream_url;
-(instancetype) initWithDictionary: (NSDictionary*) SCTrackDict {
self = [self init];
if (self) {
self.title = SCTrackDict[@"title"];
self.stream_url = SCTrackDict[@"stream_url"];
}
return self;
}
+(NSMutableArray *) parseJSONData: (NSData *) JSONData {
NSError* error;
NSMutableArray* SCTrackArray = [NSMutableArray new];
NSArray *JSONArray= [NSJSONSerialization JSONObjectWithData:JSONData options:0 error: &error];
if ([JSONArray isKindOfClass:[NSArray class]]) {
for (NSDictionary* trackDict in JSONArray) {
SCTrack* trackObject = [[SCTrack alloc]initWithDictionary:trackDict];
[SCTrackArray addObject:trackObject];
}
}
return SCTrackArray;
}
@end
내 AppDelegate.m
UITabBarController* tabBar = (UITabBarController*) self.window.rootViewController;
SCTrackListVC *SCVC = (SCTrackListVC*) [[tabBar viewControllers]objectAtIndex:2];
SCVC.managedObjectContext = self.managedObjectContext;
return YES;
-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
self.selectedTrack = self.SCTrackList[indexPath.row];
self.selectedTrackRow = indexPath.row;
self.selectedTrack = [[SCTrack alloc]initWithEntity:[NSEntityDescription entityForName:@"SCTrack" inManagedObjectContext:self.managedObjectContext]insertIntoManagedObjectContext:self.managedObjectContext];
NSError* error;
NSManagedObjectContext *context = self.managedObjectContext;
if (![context save:&error]) {
NSLog(@"Error! %@", error);
}
//This is the other way I tried it _selectedTrack = [NSEntityDescription insertNewObjectForEntityForName:@"SCTrack" inManagedObjectContext:self.managedObjectContext];
내 VC2.m
CoreData : 오류 :-(NSFetchedResultsController*) fetchedResultController {
if (_fetchedResultController != nil) {
return _fetchedResultController;
}
NSFetchRequest *fetchRequest = [[NSFetchRequest alloc] init];
NSEntityDescription *SCTrackEntity = [NSEntityDescription entityForName:@"SCTrack" inManagedObjectContext:[self managedObjectContext]];
[fetchRequest setEntity:SCTrackEntity];
// NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];
// [fetchRequest setSortDescriptors:[NSArray arrayWithObjects:sortDescriptor, nil]];
_fetchedResultController = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:[self managedObjectContext] sectionNameKeyPath:nil cacheName:nil];
_fetchedResultController.delegate = self;
return _fetchedResultController;
}
이은 내가 오류입니다 'SCTrack'
아주 새로운 코어 데이터에 NSManagedObject 클래스의 지정 초기화를 호출하지 못했습니다. 지금 몇 시간 동안 있었어. 나를 올바른 방향으로 가리켜 주셔서 감사합니다.
아에
변경 , 난을 참조하십시오. 감사. 그러나 이것이 VC1에 채워질 모든 SCTrack을 저장하지 않을 것입니까? VC2에만 추가되는 SCTracks를 저장하려고합니다. –
예. NSManaged 객체를 저장하고 싶지 않다면, 왜 그것을 처음부터 초기화하고 있습니까? –
VC1에 표시되도록 초기화 중입니다. VC2에 재생 목록으로 저장하기 위해 그 중 일부 (VC1) 만 선택하려고합니다. 나는 단지 재생 목록을 유지하기를 원한다. 내 VC2에 대한 SCTrack을 나타내는 별도의 CoreData 엔터티 클래스 (SCCoreDataTrack이라고 함)를 만들어서 가능한 솔루션을 찾고 있다고 생각합니다.하지만 확실히 큰 단서를주었습니다. –