J'essaie de créer une application basée sur le projet exemple d'Apple TheElements, mais en utilisant des données de base pour le modèle. Dans les données de base j'ai 4 tables DB connexes. Dans l'interface utilisateur, j'ai plusieurs tablesView, chacune montrant des lignes d'une table de Db différente. Lorsque vous cliquez sur une ligne dans une tableView, les éléments descendent vers les éléments d'une table associée, affichés dans une autre TableView.iPhone iOS 4 Données de base - Signal reçu du programme: "EXC_BAD_ACCESS"
Tout fonctionne mais l'application se bloque de manière inattendue à des moments aléatoires avec l'erreur: Programme reçu le signal: "EXC_BAD_ACCESS". BTW cette erreur ne montre que dans la console lors du débogage sur le périphérique. Aucune erreur ne s'affiche lors du débogage sur le simulateur. Ce screen grab montre le contenu du débogueur après un plantage.
Je ne sais pas comment déchiffrer le débogueur. Tout ce que je peux voir est le crash semble provenir de la fonction main() et _PFManagedObjectReferenceQueue est également répertorié, ce qui conduit à deviner que je fais quelque chose de mal avec les données de base.
Pour mettre en œuvre Core Data J'ajoute ce qui suit à mon en-tête délégué App:
@private
NSManagedObjectContext *managedObjectContext_;
NSManagedObjectModel *managedObjectModel_;
NSPersistentStoreCoordinator *persistentStoreCoordinator_;
@property (nonatomic, retain, readonly) NSManagedObjectContext *managedObjectContext;
@property (nonatomic, retain, readonly) NSManagedObjectModel *managedObjectModel;
@property (nonatomic, retain, readonly) NSPersistentStoreCoordinator *persistentStoreCoordinator
et en ajoutant les méthodes par défaut d'Apple pour ces fichiers à la mise en œuvre App délégué.
Puis à mon tête protocole source de données J'ai ajouté:
@property (nonatomic, retain) NSFetchedResultsController *fetchedResultsController;
@property (nonatomic, retain) NSManagedObjectContext *managedObjectContext;`
et mes fichiers d'en-tête Source de données sont les suivantes:
#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>
#import "TableViewDataSourceProtocol.h"
@interface MatchesAllDataSource : NSObject <UITableViewDataSource,TableViewDataSource, NSFetchedResultsControllerDelegate>
{
NSFetchedResultsController *fetchedResultsController;
NSManagedObjectContext *managedObjectContext;
}
@end
Lorsqu'une cellule de table est cliqué je passe le selectedObject comme suit:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)newIndexPath
{
// deselect the new row using animation
[tableView deselectRowAtIndexPath:newIndexPath animated:YES];
// get the element that is represented by the selected row.
Match *selectedMatch = [dataSource objectForIndexPath:newIndexPath];
// create an AtomicElementViewController. This controller will display the full size tile for the element
MatchViewController *matchController = [[MatchViewController alloc] init];
// set the element for the controller
matchController.selectedMatch = selectedMatch;
// push the element view controller onto the navigation stack to display it
[[self navigationController] pushViewController:matchController animated:YES];
[matchController release];
}`
Quelqu'un at-il une idée de ce qui pourrait causer mon accident? Quelqu'un peut-il me diriger dans la bonne direction pour chercher une réponse?
Existe-t-il un meilleur moyen d'implémenter des données de base avec plusieurs tablesViews? Est-ce que quelqu'un me pointera vers un bon exemple de données de base avec plusieurs tablesViews?
Votre premier indice ici est la présence de 'objc_msgSend' dans la trace de la pile. 99,9% du temps, cela indique que vous envoyez un message à un objet désalloué. Vérifiez que les objets pertinents sont gérés correctement. Cela pourrait aider, en particulier le peu sur les zombies: http: //www.touch-code-magazine.com/how-to-debug-exc_bad_access/ – warrenm
Je seconde cela et j'ajouterais aussi ce comme une autre ressource utile. –
westsider