0

なぜこれがうまくいかないのかを理解するために、過去数時間にわたって髪を引き裂いてきました. Core Data に 1 対多の関係があり、詳細セグエに値を正しく渡そうとしています。

以下はデータモデルです (属性はバイナリ データ型です)。

configureCell: メソッドでデータをフェッチすると、期待どおりの値が得られます。

- (void)configureCell:(UITableViewCell *)cell atIndexPath(NSIndexPath *)indexPath 
{ 
TBAppDelegate *delegate = (TBAppDelegate *)[[UIApplication sharedApplication] delegate];

managedObjectContext = [delegate managedObjectContext];

self.everything = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.section];

NSArray *arg = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.urls.urls];

NSLog (@"%@, [arg valueForKey:@"source"]); // this prints out a list of stored urls containing locations of jpeg images
}

私の NSFetchedResultsController:

- (NSFetchedResultsController *)fetchedResultsController 
{ 
TBAppDelegate *delegate = (TBAppDelegate *)[[UIApplication sharedApplication] delegate];

self.managedObjectContext = delegate.managedObjectContext;

NSFetchRequest *fetchRequest = nil;

fetchRequest = [[NSFetchRequest alloc] init];

NSEntityDescription *entity = nil;

entity = [NSEntityDescription entityForName:@"Everything" inManagedObjectContext:managedObjectContext];

[fetchRequest setEntity:entity];

[fetchRequest setFetchBatchSize:INFINITY];

NSSortDescriptor *albumDescriptor = nil;

albumDescriptor = [[NSSortDescriptor alloc] initWithKey:@"album_names" ascending:NO];

NSSortDescriptor *urlDescriptor = nil;

urlDescriptor = [[NSSortDescriptor alloc] initWithKey:@"urls.urls" ascending:NO];

NSArray *sortDescriptors = nil;

sortDescriptors = [[NSArray alloc] initWithObjects:albumDescriptor, urlDescriptor, nil];

[fetchRequest setSortDescriptors:sortDescriptors];

NSFetchedResultsController *frc = nil;

frc = [[NSFetchedResultsController alloc] initWithFetchRequest:fetchRequest managedObjectContext:managedObjectContext sectionNameKeyPath:nil cacheName:@"Root"];

[frc setDelegate:self];

[self setFetchedResultsController:frc];

return frc;

}

これが私の prepareForSegue: メソッドです。この部分は機能しません。詳細ビュー コントローラのセクション数を設定しようとすると、認識できないセレクタ エラーでクラッシュします。

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender 
{
    NSIndexPath *indexPath;

    indexPath = [self.tableView indexPathForSelectedRow];

    TBAppDelegate *delegate = (TBAppDelegate *)[[UIApplication sharedApplication] delegate];

    managedObjectContext = [delegate managedObjectContext];

    self.everything = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.section];

    NSArray *data = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.album_names];

    NSArray *urls = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.urls.urls];

    TBEverythingDetailViewController *details = segue.destinationViewController;

    details.everything = [[data objectAtIndex:indexPath.section]valueForKey:@"name"];

    self.urls.urls = [fetchedResultsController.fetchedObjects objectAtIndex:indexPath.section];

    details.everythingGroup = [urls objectAtIndex:indexPath.section];  
}

詳細ビュー コントローラの一部:

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView 
{

// This is where the actual crash happens. It complains about [_NSDictionaryM urls:] unrecognized selector sent to instance
NSArray *count = [NSKeyedUnarchiver unarchiveObjectWithData:self.everythingGroup.urls.urls];

return [count count]; 
}

なぜ機能しないのかについて、ここでいくつかの明らかなステップが欠けているように感じます。助けてもらえますか?

4

2 に答える 2

0

あなたの self.everythinggrpup は NSDictionary であるため、セレクター「urls」には応答しません。どこかで、Everything オブジェクトの代わりに NSDictionary を self.everythinggroup に割り当てています。したがって、それを行う必要はありません。または、その辞書からすべてのオブジェクトを取得してから、URL を要求する必要があります。これをどのように設定したかによって異なります。

于 2013-11-03T08:27:16.217 に答える
0

詳細の everythingGroup を次のように設定しました。

NSArray *urls = [NSKeyedUnarchiver unarchiveObjectWithData:self.everything.urls.urls];
details.everythingGroup = [urls objectAtIndex:indexPath.section];

URLs.urls に見られるように、NSData にアーカイブされた辞書の配列です。今details.everythingGroupは辞書ですが、あなたはそれにアクセスしています:

NSArray *count = [NSKeyedUnarchiver unarchiveObjectWithData:self.everythingGroup.urls.urls];

ここでクラッシュするのは正常です。アクセスすると、次のようにdetails.everythingGroupなりますEverything

于 2013-11-03T08:31:56.707 に答える