iPhone - Comment changer la Chaîne de l'Étiquette correctement?

Je suis actuellement en apprentissage de la programmation sur iPhone.

J'ai actuellement une petite application de test avec une maquette du clavier, donc j'ai quelques boutons qui lorsqu'il est pressé devez placer du texte dans un label.

Je puis prendre ce qui est dans l'étiquette et l'utiliser pour ouvrir un ABUNKnownPersonControllerView pour l'utilisation il. Juste une application de base de s'habituer à un peu de choses dans l'iPhone.

Où j'ai de la difficulté semble être à travailler avec la chaîne de caractères utilisée pour afficher ce que je veux dans l'étiquette. Je reçois le EXC_BAD_ACCESS d'erreur donc j'ai relu la gestion de la mémoire docs mais je ne peux pas le trouver n'importe où qu'il devrait y avoir une fuite de mémoire.

Je pense donc que mon problème est que je suis incorrecte de travail à la Chaîne. Mon code est comme suit:

//Fichier d'en-tête

@interface KeyPadViewController : UIViewController <ABUnknownPersonViewControllerDelegate>{
IBOutlet UILabel *phoneNumber;
//NSString *number;
}

@property (nonatomic, retain) UILabel *phoneNumber;
//@property (nonatomic, retain) NSString *number;

-(IBAction)addNum1;
-(IBAction)addNum2;
-(IBAction)showUnknownPersonViewController;

//Fichier d'implémentation

- (void)viewDidLoad
{
[super viewDidLoad];
self.title = NSLocalizedString(@"Keypad",@"Keypad");
//self.number = @"";
self.phoneNumber.text = @"";
}


-(IBAction)addNum1{

//self.number = [self.number stringByAppendingString:@"1"];
self.phoneNumber.text = [self.phoneNumber.text stringByAppendingString:@"1"];

}

-(IBAction)addNum2{

//self.number = [self.number stringByAppendingString:@"2"];
self.phoneNumber.text = [self.phoneNumber.text stringByAppendingString:@"2"];


}

Et la showUnknownPerson vue de la mise en œuvre de fichier:

-(void)showUnknownPersonViewController
{
    //NSString *contactNum = self.phoneNumber.text;
    ABRecordRef aContact = ABPersonCreate();
    CFErrorRef anError = NULL;
    ABMultiValueRef email = ABMultiValueCreateMutable(kABPersonPhoneProperty);

    bool didAdd = ABMultiValueAddValueAndLabel(email, self.phoneNumber.text, kABPersonPhoneMobileLabel, NULL);

    if (didAdd == YES)
    {
        ABRecordSetValue(aContact, kABPersonPhoneProperty, email, &anError);
        if (anError == NULL)
        {
            ABUnknownPersonViewController *picker = [[ABUnknownPersonViewController alloc] init];
            picker.unknownPersonViewDelegate = self;
            picker.displayedPerson = aContact;
            picker.allowsAddingToAddressBook = YES;
            picker.allowsActions = YES;


            [self.navigationController pushViewController:picker animated:YES];
            [picker release];
        }
        else 
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" 
                                                            message:@"Could not create unknown user" 
                                                           delegate:nil 
                                                  cancelButtonTitle:@"Cancel"
                                                  otherButtonTitles:nil];
            [alert show];
            [alert release];
        }
    }   
    CFRelease(email);
    CFRelease(aContact);
}

Et le dealloc:

- (void)dealloc
{
[phoneNumber release]; //@synthesize

//[numéro de release]; //@synthétiser
[super dealloc];
}

J'ai essayé d'utiliser une Mutable chaîne, mais ont la même erreur, j'ai aussi essayé de ne pas relâcher la UILabel et la NSString et ont le même problème.

Lorsque mon application se charge si j'appuie sur un bouton et d'un caractère apparaît sur l'étiquette, si je puis utiliser le showUnknowPersonViewController tout fonctionne bien, si j'appuie sur le bouton 1 et le bouton 2 de sorte que je connais ont deux caractères dans le UILabel ("12") et sélectionnez pour utiliser le showUnknownPersonViewcontroller puis-je obtenir le crash.

*** -[CFString release]: message sent to deallocated instance 0x1226a0

Cependant, je ne comprends pas d'où il pourrait être libéré?

C'est probablement quelque chose de base que j'ai manqué dans les tutoriels mais je ne peux pas le comprendre, n'importe qui peut voir ce que je fais de mal?


EDIT: Juste pour ajouter que si l'auto.numéro de téléphone.texte (UILabel) renvoie soit vide ou d'un caractère, il fonctionne très bien cependant, si ses 2 ou plus-je obtenir le crash.


EDIT 2: j'ai enlevé mon NSString du code complètement et j'ai toujours le même problème, de sorte qu'il ressemble à son la UILabel c'est à l'origine du problème? Voir modification du code ci-dessus.

  • Ne savez-vous pas que la ligne de l'incident en apparence? Essayez d'activer NSZombieEnabled, voir si elle vous obtient plus loin!
  • J'ai ajouté NSZombieEnabled pour le débogueur, mais je suis en utilisant Xcode 4 et je ne peux pas sembler obtenir travail pour me montrer la ligne où il est en panne, quand je le lance, il a toujours des chaussures de moi cette ligne : int retVal = UIApplicationMain(argc, argv, nil, nil);