J'ai donc travaillé sur la préparation de mon application pour iOS 4 et iPhone 4. J'ai installé les derniers Xcode et SDK et j'ai peaufiné les graphiques, etc. Tout fonctionne parfaitement, sauf que j'ai des problèmes pour lancer l'application sur le simulateur d'iPad. Je n'ai pas d'iPad à tester.Assertion et exception sur un simulateur d'iPad mais pas sim iPhone ou appareil!
Mon application utilise un ABUnknownPersonViewController et elle se bloque lorsque je clique sur "Créer un nouveau contact", mais WORKS FINE si je clique sur "Ajouter au contact existant". Très étrange!!
Je reçois le texte suivant dans la console lorsque l'application se bloque:
2010-10-21 13:57:25.873 Copy2contact[58432:207] *** Assertion failure in -[ABPropertyGroup propertyModelControllerAtIndex:], /SourceCache/AddressBookUI_Sim/AddressBookUI-643.49/ABPropertyGroup.m:228
2010-10-21 13:57:25.875 Copy2contact[58432:207] *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: ''
2010-10-21 13:57:25.877 Copy2contact[58432:207] Stack: (
...
...
)
terminate called after throwing an instance of 'NSException'
Cela ne se produit pas sur le simulateur d'iPhone ou les appareils iPhone, iPad juste le sim.
- famille de l'appareil ciblé: iPhone
- SDK de base: iOS périphérique 3.2
- Xcode 3.2.4
Voici comment construire un exemple de programme à tester:
Créer un nouveau projet iPhone basé sur la navigation dans Xcode
Ajouter les cadres et AddressBook AddressBookUI au projet
Ajoutez la ligne suivante en haut de RootViewController.m:
#import <AddressBookUI/ABUnknownPersonViewController.h>
Ajouter ce qui suit à
viewDidLoad
dans RootViewController.m:[super viewDidLoad];
ABRecordRef personRef = ABPersonCreate();
ABUnknownPersonViewController* abNew = [[ABUnknownPersonViewController alloc] init];
CFErrorRef err = nil; // Should be released if set? ABRecordSetValue(personRef, kABPersonFirstNameProperty, [NSString stringWithString:@"First"], &err) && ABRecordSetValue(personRef, kABPersonLastNameProperty, [NSString stringWithString:@"Last"], &err);
abNew.displayedPerson = personRef;
abNew.allowsActions = NO;
abNew.allowsAddingToAddressBook = YES;
[self.navigationController pushViewController:abNew animated:YES];
[abNew release];
CFRelease(personRef);
Mise à jour: J'ai parcouru toutes les itérations du SDK de base et de la version cible d'iOS, et l'essentiel est que je n'arrive pas à faire fonctionner le simulateur d'iPad si la famille d'appareils Ciblés à l'iPhone. Si je crée une application iPad, cela fonctionne sans l'assertion, mais malheureusement ce n'est pas une option pour mon projet. – Nicholas