Problem beim Adressbuch Zugriff

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Problem beim Adressbuch Zugriff

    Hallo zusammen,
    ich versuch mich grade n meiner ersten App und hier und da hab ich doch noch das eine oder andere Problem. Ich wollte heute eigentlich den Zugriff auf das Adressbuch programmieren und hab mir dafür mal die von Apple zur Verfügung gestellten Samples angeschaut und einfach mal versucht das nach zu programmieren.
    developer.apple.com/library/io…/Chapters/QuickStart.html

    Das erste Problem war dann schonmal das der Ausdruck "[self presentModalViewController:picker animated:YES]" leider nicht mehr aktuell ist. Da bin ich dann auf den Ausdruck "[self presentViewController:self animated:YES completion:NULL]" ausgewichen. Dasselbe mit "[self dismissModalViewControllerAnimated:YES]".
    Soweit war dann auch alles ... keine Fehler Meldung... App auf dem Simulator gestartet... und .... Enttäuschung. Läuft nicht. Es wird keine einzige der von mir implementierten Methoden ausgeführt.

    Mein Header-file

    Quellcode

    1. //
    2. // CEViewController.h
    3. // ContactBookTry
    4. //
    5. // Created by Hinrich Hobbensiefken on 27.10.13.
    6. // Copyright (c) 2013 Hinrich Hobbensiefken. All rights reserved.
    7. //
    8. #import <UIKit/UIKit.h>
    9. #import <AddressBook/AddressBook.h>
    10. #import <AddressBookUI/AddressBookUI.h>
    11. @interface CEViewController : UIViewController <ABPeoplePickerNavigationControllerDelegate>
    12. @property (weak, nonatomic) IBOutlet UILabel *firstName;
    13. @property (weak, nonatomic) IBOutlet UILabel *phoneNumber;
    14. - (IBAction)showPicker:(id)sender;
    15. @end
    Alles anzeigen


    Mein Implementation-File:

    Quellcode

    1. //
    2. // CEViewController.m
    3. // ContactBookTry
    4. //
    5. // Created by Hinrich Hobbensiefken on 27.10.13.
    6. // Copyright (c) 2013 Hinrich Hobbensiefken. All rights reserved.
    7. //
    8. #import "CEViewController.h"
    9. @interface CEViewController ()
    10. @end
    11. @implementation CEViewController
    12. @synthesize firstName;
    13. @synthesize phoneNumber;
    14. - (void)viewDidLoad
    15. {
    16. NSLog(@"%s",__PRETTY_FUNCTION__);
    17. [super viewDidLoad];
    18. // Do any additional setup after loading the view, typically from a nib.
    19. }
    20. - (void)didReceiveMemoryWarning
    21. {
    22. NSLog(@"%s",__PRETTY_FUNCTION__);
    23. [super didReceiveMemoryWarning];
    24. // Dispose of any resources that can be recreated.
    25. }
    26. - (void)peoplePickerNavigationControllerDidCancel:
    27. (ABPeoplePickerNavigationController *)peoplePicker
    28. {
    29. NSLog(@"%s",__PRETTY_FUNCTION__);
    30. [self dismissViewControllerAnimated:YES completion:NULL];
    31. }
    32. - (BOOL)peoplePickerNavigationController:
    33. (ABPeoplePickerNavigationController *)peoplePicker
    34. shouldContinueAfterSelectingPerson:(ABRecordRef)person
    35. {
    36. NSLog(@"%s",__PRETTY_FUNCTION__);
    37. [self displayPerson:person];
    38. [self dismissViewControllerAnimated:YES completion:NULL];
    39. return NO;
    40. }
    41. - (BOOL)peoplePickerNavigationController:
    42. (ABPeoplePickerNavigationController *)peoplePicker
    43. shouldContinueAfterSelectingPerson:(ABRecordRef)person
    44. property:(ABPropertyID)property
    45. identifier:(ABMultiValueIdentifier)identifier
    46. {
    47. NSLog(@"%s",__PRETTY_FUNCTION__);
    48. return NO;
    49. }
    50. - (void) displayPerson: (ABRecordRef)person
    51. {
    52. NSLog(@"%s",__PRETTY_FUNCTION__);
    53. NSString* name = (__bridge_transfer NSString*)ABRecordCopyValue(person, kABPersonFirstNameProperty);
    54. self.firstName.text = name;
    55. NSString* phone = Nil;
    56. ABMultiValueRef phoneNumbers = ABRecordCopyValue(person, kABPersonPhoneProperty);
    57. if (ABMultiValueGetCount(phoneNumbers)>0) {
    58. phone = (__bridge_transfer NSString*)ABMultiValueCopyValueAtIndex(phoneNumbers, 0);
    59. } else {
    60. phone = @"[none]";
    61. }
    62. self.phoneNumber.text = phone;
    63. CFRelease(phoneNumbers);
    64. }
    65. - (IBAction)showPicker:(id)sender
    66. {
    67. NSLog(@"%s",__PRETTY_FUNCTION__);
    68. ABPeoplePickerNavigationController *picker = [[ABPeoplePickerNavigationController alloc] init];
    69. picker.peoplePickerDelegate = self;
    70. [self presentViewController:self animated:YES completion:NULL];
    71. }
    72. @end
    Alles anzeigen


    und die Fehlermeldung:

    Quellcode

    1. 2013-10-27 15:10:30.107 ContactBookTry[3108:a0b] *** Terminating app due to uncaught exception 'NSUnknownKeyException', reason: '[<CEViewController 0x9c58b90> setValue:forUndefinedKey:]: this class is not key value coding-compliant for the key showPicker.'
    2. *** First throw call stack:
    3. (
    4. 0 CoreFoundation 0x01a5b5e4 __exceptionPreprocess + 180
    5. 1 libobjc.A.dylib 0x017de8b6 objc_exception_throw + 44
    6. 2 CoreFoundation 0x01aeb6a1 -[NSException raise] + 17
    7. 3 Foundation 0x0149fc2e -[NSObject(NSKeyValueCoding) setValue:forUndefinedKey:] + 282
    8. 4 Foundation 0x0140bf3b _NSSetUsingKeyValueSetter + 88
    9. 5 Foundation 0x0140b493 -[NSObject(NSKeyValueCoding) setValue:forKey:] + 267
    10. 6 Foundation 0x0146d94a -[NSObject(NSKeyValueCoding) setValue:forKeyPath:] + 412
    11. 7 UIKit 0x007f2cd5 -[UIRuntimeOutletConnection connect] + 106
    12. 8 libobjc.A.dylib 0x017f07d2 -[NSObject performSelector:] + 62
    13. 9 CoreFoundation 0x01a56b6a -[NSArray makeObjectsPerformSelector:] + 314
    14. 10 UIKit 0x007f182e -[UINib instantiateWithOwner:options:] + 1417
    15. 11 UIKit 0x00663c95 -[UIViewController _loadViewFromNibNamed:bundle:] + 280
    16. 12 UIKit 0x0066443d -[UIViewController loadView] + 302
    17. 13 UIKit 0x0066473e -[UIViewController loadViewIfRequired] + 78
    18. 14 UIKit 0x00664c44 -[UIViewController view] + 35
    19. 15 UIKit 0x0058d5ad -[UIWindow addRootViewControllerViewIfPossible] + 66
    20. 16 UIKit 0x0058d947 -[UIWindow _setHidden:forced:] + 312
    21. 17 UIKit 0x0058dbdd -[UIWindow _orderFrontWithoutMakingKey] + 49
    22. 18 UIKit 0x0059844a -[UIWindow makeKeyAndVisible] + 65
    23. 19 UIKit 0x0054b8e0 -[UIApplication _callInitializationDelegatesForURL:payload:suspended:] + 1851
    24. 20 UIKit 0x0054ffb8 -[UIApplication _runWithURL:payload:launchOrientation:statusBarStyle:statusBarHidden:] + 824
    25. 21 UIKit 0x0056442c -[UIApplication handleEvent:withNewEvent:] + 3447
    26. 22 UIKit 0x00564999 -[UIApplication sendEvent:] + 85
    27. 23 UIKit 0x00551c35 _UIApplicationHandleEvent + 736
    28. 24 GraphicsServices 0x02a072eb _PurpleEventCallback + 776
    29. 25 GraphicsServices 0x02a06df6 PurpleEventCallback + 46
    30. 26 CoreFoundation 0x019d6dd5 __CFRUNLOOP_IS_CALLING_OUT_TO_A_SOURCE1_PERFORM_FUNCTION__ + 53
    31. 27 CoreFoundation 0x019d6b0b __CFRunLoopDoSource1 + 523
    32. 28 CoreFoundation 0x01a017ec __CFRunLoopRun + 2156
    33. 29 CoreFoundation 0x01a00b33 CFRunLoopRunSpecific + 467
    34. 30 CoreFoundation 0x01a0094b CFRunLoopRunInMode + 123
    35. 31 UIKit 0x0054f6ed -[UIApplication _run] + 840
    36. 32 UIKit 0x0055194b UIApplicationMain + 1225
    37. 33 ContactBookTry 0x000027cd main + 141
    38. 34 libdyld.dylib 0x02e9a725 start + 0
    39. )
    40. libc++abi.dylib: terminating with uncaught exception of type NSException
    Alles anzeigen


    Was hab ich übersehen und falsch gemacht? Ich hoffe mir kann jmd helfen... bin leider nicht erfahren genug, damit mir die Fehlermeldung etwas sagt

    Schonmal vielen Dank im Voraus!
    Think positive, flaps negative!
  • Ok deine Einwände mach natürlich Sinn^^

    aus:

    Quellcode

    1. [self presentViewController:self animated:YES completion:NULL];

    wurde nun:

    Quellcode

    1. [self presentViewController:picker animated:YES completion:NULL];


    und aus:

    Quellcode

    1. [self dismissViewControllerAnimated:YES completion:NULL];

    wurde:

    Quellcode

    1. [peoplePicker dismissViewControllerAnimated:YES completion:nil];


    Leider ohne Erfolg. Der Fehler bleibt der Gleiche :/

    Mir ist aufgefallen, dass du in deinem Sample (der übrigens bei mir ohne Probleme ausgeführt wird) mal NULL und mal nil verwendest. Gibt es zwischen NULL und nil einen Unterschied?
    Think positive, flaps negative!
  • Hinne123 schrieb:

    Mir ist aufgefallen, dass du in deinem Sample (der übrigens bei mir ohne Probleme ausgeführt wird) mal NULL und mal nil verwendest. Gibt es zwischen NULL und nil einen Unterschied?
    ..nö solange du bei Objective-C bleibst nicht. Wenn du aber anfängst dein Code mit C/C++ Code zu mischen dann wird es wieder entscheidend.

    Bzgl. deiner Exception: ich vermute die du hast die Methode displayPerson nicht im Header deklariert. Und du fragst nicht den Authentifizierungs-Status für das AdressBook ab.
  • Ok danke an der fehlenden Berechtigungsabfrage wird es wohl liegen. Die Deklaration in der .h hab ich hinzugefügt.

    @floschliep

    Wo wird den bei deinem Sample nach der Berechtigung gefragt? Ich wurde zwar beim Ausführen gefragt, aber in deinem Code finde ich nichts in die Richtung?

    Ich hab mich mittlerweile, allerdings auch schon wieder an mein eigentliches Projekt gesetzt. Es ging mir bei dem Test hauptsächlich, um das zerlegen des ABPersonPhonePropertys.
    Think positive, flaps negative!
  • Hinne123 schrieb:

    Wo wird den bei deinem Sample nach der Berechtigung gefragt? Ich wurde zwar beim Ausführen gefragt, aber in deinem Code finde ich nichts in die Richtung?
    Schau mal hier in einem anderem SampleProjekt bei Apple: ABUIGroups

    Es geht im Prinzip vorrangig zu erfragen ob die Berechtigung vorliegt und ein weiterarbeiten Sinn macht oder der Nutzer informiert werden soll den Zugriff zu gestatten.