2016-04-03 11 views
0

Ich benutze eine KontaktPicker-Funktion, um aus Kontakten auszuwählen und sie zu meiner erstellten Tabellenansicht hinzuzufügen. Wenn ich jedoch meine App starte und auf den gewünschten Kontakt klicke, stürzt meine App ab. Das Problem scheint die Funktion contactPicker (CNContactPickerViewController, didSelect ...) zu sein. Obwohl wenn ich die schnelle Datei anzeigen, keine Fehler angezeigt werden. Kann jemand helfen, das Problem zu lösen?Thread 1: EXC_BAD_INSTRUCTION (Code = EXC_1386_INVOP, SUBCODE = 0X0) - Fehler

Lookout`Lookout.ViewTwo.contactPicker (Lookout.ViewTwo)(__ObjC.CNContactPickerViewController, didSelectContact : __ObjC.CNContact) ->(): 
0x103ffff10 <+0>: pushq %rbp 
0x103ffff11 <+1>: movq %rsp, %rbp 
0x103ffff14 <+4>: subq $0x90, %rsp 
0x103ffff1b <+11>: movq 0x92ae(%rip), %rax  ; (void *)0x0000000106eae2e0: swift_isaMask 
0x103ffff22 <+18>: movq %rdi, -0x8(%rbp) 
0x103ffff26 <+22>: movq %rsi, -0x10(%rbp) 
0x103ffff2a <+26>: movq %rdx, -0x18(%rbp) 
0x103ffff2e <+30>: movq (%rdx), %rcx 
0x103ffff31 <+33>: andq (%rax), %rcx 
0x103ffff34 <+36>: movq %rdi, -0x28(%rbp) 
0x103ffff38 <+40>: movq %rdx, %rdi 
0x103ffff3b <+43>: movq %rsi, -0x30(%rbp) 
0x103ffff3f <+47>: movq %rdx, -0x38(%rbp) 
0x103ffff43 <+51>: callq *0x78(%rcx) 
0x103ffff46 <+54>: movq %rax, -0x20(%rbp) 
0x103ffff4a <+58>: cmpq $0x0, -0x20(%rbp) 
0x103ffff52 <+66>: jne 0x103ffff82    ; <+114> at ViewTwo.swift:88 
0x103ffff54 <+68>: jmp 0x103ffff56    ; <+70> at ViewTwo.swift:88 
0x103ffff56 <+70>: leaq 0x6ddd(%rip), %rdi  ; "fatal error" 
0x103ffff5d <+77>: movl $0xb, %eax 
0x103ffff62 <+82>: movl %eax, %esi 
0x103ffff64 <+84>: movl $0x2, %eax 
0x103ffff69 <+89>: leaq 0x6d90(%rip), %rcx  ; "unexpectedly found nil while unwrapping an Optional value" 
0x103ffff70 <+96>: movl $0x39, %edx 
0x103ffff75 <+101>: movl %edx, %r8d 
0x103ffff78 <+104>: movl %eax, %edx 
0x103ffff7a <+106>: movl %eax, %r9d 
0x103ffff7d <+109>: callq 0x10400438e    ; symbol stub for: function signature specialization <Arg[0] = Exploded, Arg[1] = Exploded, Arg[2] = Dead, Arg[3] = Dead> of Swift._fatalErrorMessage (Swift.StaticString, Swift.StaticString, Swift.StaticString, Swift.UInt) ->() 
0x103ffff82 <+114>: movq -0x20(%rbp), %rax 
0x103ffff86 <+118>: movq %rax, %rdi 
0x103ffff89 <+121>: movq %rax, -0x40(%rbp) 
0x103ffff8d <+125>: callq 0x1040043d0    ; symbol stub for: objc_retain 
0x103ffff92 <+130>: movq 0x9237(%rip), %rdi  ; (void *)0x0000000106eae2e0: swift_isaMask 
0x103ffff99 <+137>: movq -0x40(%rbp), %rcx 
0x103ffff9d <+141>: movq (%rcx), %rdx 
0x103ffffa0 <+144>: andq (%rdi), %rdx 
0x103ffffa3 <+147>: movq 0x118(%rdx), %rdx 
0x103ffffaa <+154>: movq %rax, -0x48(%rbp) 
0x103ffffae <+158>: movq %rdx, -0x50(%rbp) 
0x103ffffb2 <+162>: callq 0x104002800    ; type metadata accessor for __ObjC.CNContact 
0x103ffffb7 <+167>: movl $0x1, %esi 
0x103ffffbc <+172>: movl %esi, %edi 
0x103ffffbe <+174>: movq %rax, %rsi 
0x103ffffc1 <+177>: movq %rax, -0x58(%rbp) 
0x103ffffc5 <+181>: callq 0x10400436a    ; symbol stub for: Swift._allocateUninitializedArray <A> (Builtin.Word) -> (Swift.Array<A>, Builtin.RawPointer) 
0x103ffffca <+186>: movq -0x30(%rbp), %rdi 
0x103ffffce <+190>: movq %rax, -0x60(%rbp) 
0x103ffffd2 <+194>: movq %rdx, -0x68(%rbp) 
0x103ffffd6 <+198>: callq 0x1040043d0    ; symbol stub for: objc_retain 
0x103ffffdb <+203>: movq -0x68(%rbp), %rcx 
0x103ffffdf <+207>: movq -0x30(%rbp), %rdx 
0x103ffffe3 <+211>: movq %rdx, (%rcx) 
0x103ffffe6 <+214>: movq -0x60(%rbp), %rdi 
0x103ffffea <+218>: movq -0x58(%rbp), %rsi 
0x103ffffee <+222>: movq %rax, -0x70(%rbp) 
0x103fffff2 <+226>: callq 0x10400434c    ; symbol stub for: Swift.Array.init <A> (Swift.Array<A>.Type)(arrayLiteral : Swift.Array<A>...) -> Swift.Array<A> 
0x103fffff7 <+231>: movq %rax, %rdi 
0x103fffffa <+234>: movq -0x40(%rbp), %rsi 
0x103fffffe <+238>: movq -0x50(%rbp), %rax 
0x104000002 <+242>: callq *%rax 
0x104000004 <+244>: movq -0x40(%rbp), %rdi 
0x104000008 <+248>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x10400000d <+253>: movq -0x20(%rbp), %rdi 
0x104000011 <+257>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x104000016 <+262>: movq -0x38(%rbp), %rdi 
0x10400001a <+266>: callq 0x1040043d0    ; symbol stub for: objc_retain 
0x10400001f <+271>: movq -0x38(%rbp), %rcx 
0x104000023 <+275>: movq 0xcbae(%rip), %rsi  ; "navigationController" 
0x10400002a <+282>: movq %rcx, %rdi 
0x10400002d <+285>: movq %rax, -0x78(%rbp) 
0x104000031 <+289>: callq 0x1040043be    ; symbol stub for: objc_msgSend 
0x104000036 <+294>: movq %rax, %rdi 
0x104000039 <+297>: callq 0x1040043dc    ; symbol stub for: objc_retainAutoreleasedReturnValue 
0x10400003e <+302>: cmpq $0x0, %rax 
0x104000044 <+308>: sete %r8b 
0x104000048 <+312>: xorb $0x1, %r8b 
0x10400004c <+316>: testb $0x1, %r8b 
0x104000050 <+320>: movq %rax, -0x80(%rbp) 
0x104000054 <+324>: jne 0x104000061    ; <+337> at ViewTwo.swift:89 
0x104000056 <+326>: movq -0x38(%rbp), %rdi 
0x10400005a <+330>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x10400005f <+335>: jmp 0x1040000d2    ; <+450> at ViewTwo.swift:91 
0x104000061 <+337>: movl $0x1, %edx 
0x104000066 <+342>: movq 0xcb73(%rip), %rsi  ; "popViewControllerAnimated:" 
0x10400006d <+349>: movq -0x80(%rbp), %rax 
0x104000071 <+353>: movq %rax, %rdi 
0x104000074 <+356>: callq 0x1040043be    ; symbol stub for: objc_msgSend 
0x104000079 <+361>: movq %rax, %rdi 
0x10400007c <+364>: callq 0x1040043dc    ; symbol stub for: objc_retainAutoreleasedReturnValue 
0x104000081 <+369>: movq -0x80(%rbp), %rdi 
0x104000085 <+373>: movq %rax, -0x88(%rbp) 
0x10400008c <+380>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x104000091 <+385>: movq -0x38(%rbp), %rdi 
0x104000095 <+389>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x10400009a <+394>: movq -0x88(%rbp), %rax 
0x1040000a1 <+401>: movq %rax, -0x90(%rbp) 
0x1040000a8 <+408>: movq -0x90(%rbp), %rax 
0x1040000af <+415>: movq %rax, %rdi 
0x1040000b2 <+418>: callq 0x104004460    ; symbol stub for: swift_unknownRelease 
0x1040000b7 <+423>: movq -0x30(%rbp), %rdi 
0x1040000bb <+427>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x1040000c0 <+432>: movq -0x28(%rbp), %rdi 
0x1040000c4 <+436>: callq 0x1040043ca    ; symbol stub for: objc_release 
0x1040000c9 <+441>: addq $0x90, %rsp 
0x1040000d0 <+448>: popq %rbp 
0x1040000d1 <+449>: retq 
0x1040000d2 <+450>: xorl %eax, %eax 
0x1040000d4 <+452>: movl %eax, %ecx 
0x1040000d6 <+454>: movq %rcx, -0x90(%rbp) 
0x1040000dd <+461>: jmp 0x1040000a8    ; <+408> at ViewTwo.swift:89 

Mein Code

protocol ViewTwoDelegate { 
    func didFetchContacts(contacts: [CNContact]) 
} 

class ViewTwo: UIViewController, UITableViewDataSource, UITableViewDelegate, ViewTwoDelegate, ADBannerViewDelegate, CNContactPickerDelegate { 


    @IBOutlet weak var Banner: ADBannerView! 

    var contacts = [CNContact]() 

    var delegate: ViewTwo! 

    @IBOutlet weak var saveLookout: UITableView! 

    func configureTableView() { 
     saveLookout.delegate = self 
     saveLookout.dataSource = self 
     saveLookout.registerNib(UINib(nibName: "LookoutCell", bundle: nil), forCellReuseIdentifier: "idCellContactLookout") 

    func viewDidLoad() { 
     super.viewDidLoad() 

      Banner.hidden = true 
      Banner.delegate = self 
      self.canDisplayBannerAds = true 

     delegate = self 

     configureTableView() 

     } 

    } 

    override func didReceiveMemoryWarning() { 
     super.didReceiveMemoryWarning() 
     // Dispose of any resources that can be recreated. 

    } 


    func bannerViewActionShouldBegin(banner: ADBannerView!, willLeaveApplication willLeave: Bool) -> Bool { 
     return true 
    } 

    func bannerViewDidLoadAd(banner: ADBannerView!) { 
     Banner.hidden = false 
    } 

    func bannerView(banner: ADBannerView!, didFailToReceiveAdWithError error: NSError!) { 
     NSLog("Error") 
    } 

    func bannerViewWillLoadAd(banner: ADBannerView!) { 
    } 



    //IBAction functions 
    @IBAction func importLookout(sender: AnyObject) { 
     let contactPickerViewController = CNContactPickerViewController() 

     contactPickerViewController.predicateForEnablingContact = NSPredicate(format: "phoneNumbers != nil") 

     contactPickerViewController.delegate = self 

     presentViewController(contactPickerViewController, animated: true, completion: nil) 

    } 

    func contactPicker(picker: CNContactPickerViewController, didSelectContact contacts: CNContact){ 
     delegate.didFetchContacts([contacts]) 
     navigationController?.popViewControllerAnimated(true) 

    } 


    func refetchContact(contact contact: CNContact, atIndexPath indexPath: NSIndexPath) { 
     AppDelegate.getAppDelegate().requestForAccess { (accessGranted) -> Void in 
      if accessGranted { 
       // let keys = [CNContactGivenNameKey, CNContactFamilyNameKey, CNContactEmailAddressesKey, CNContactBirthdayKey, CNContactImageDataKey] 
       let keys = [CNContactFormatter.descriptorForRequiredKeysForStyle(CNContactFormatterStyle.FullName), CNContactPhoneNumbersKey] 

       do { 
        let contactRefetched = try AppDelegate.getAppDelegate().contactStore.unifiedContactWithIdentifier(contact.identifier, keysToFetch: keys) 
        self.contacts[indexPath.row] = contactRefetched 

        dispatch_async(dispatch_get_main_queue(), {() -> Void in 
         self.saveLookout.reloadRowsAtIndexPaths([indexPath], withRowAnimation: UITableViewRowAnimation.Automatic) 
        }) 
       } 
       catch { 
        print("Unable to refetch the contact: \(contact)", separator: "", terminator: "\n") 
       } 
      } 
     } 
    } 


    // Tableview data source methods 


    func numberOfSectionsInTableView(tableView: UITableView) -> Int { 
     return 1 
    } 

    func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int { 
     return contacts.count 
    } 

    func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell { 

     let cell = tableView.dequeueReusableCellWithIdentifier("idCellContactLookout") as! LookoutCell 

     let currentContact = contacts[indexPath.row] 

     cell.lblFirstname.text = CNContactFormatter.stringFromContact(currentContact, style: .FullName) 

     if !currentContact.isKeyAvailable(CNContactPhoneNumbersKey) { 
      refetchContact(contact: currentContact, atIndexPath: indexPath) 
     } 
     else { 
      // Set the phone info. 
      var homePhoneNumber: String! 
      for mobileNumber in currentContact.phoneNumbers{ 
       if mobileNumber.label == CNLabelPhoneNumberMobile { 
        homePhoneNumber = mobileNumber.value as! String 
        break 
       } 
      } 

      if homePhoneNumber != nil { 
       cell.lblMobileNumber.text = CNLabelPhoneNumberMobile 
      } 
      else { 
       cell.lblMobileNumber.text = "Not available mobile number" 
      } 

     } 


     return cell 
    } 

    func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat { 
     return 100.0 
    } 

    func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) { 
     let selectedContact = contacts[indexPath.row] 

     let keys = [CNContactFormatter.descriptorForRequiredKeysForStyle(CNContactFormatterStyle.FullName), CNContactPhoneNumbersKey] 

     if selectedContact.areKeysAvailable([CNContactViewController.descriptorForRequiredKeys()]) { 
      let contactViewController = CNContactViewController(forContact: selectedContact) 
      contactViewController.contactStore = AppDelegate.getAppDelegate().contactStore 
      contactViewController.displayedPropertyKeys = keys 
      navigationController?.pushViewController(contactViewController, animated: true) 
     } 
     else { 
      AppDelegate.getAppDelegate().requestForAccess({ (accessGranted) -> Void in 
       if accessGranted { 
        do { 
         let contactRefetched = try AppDelegate.getAppDelegate().contactStore.unifiedContactWithIdentifier(selectedContact.identifier, keysToFetch: [CNContactViewController.descriptorForRequiredKeys()]) 

         dispatch_async(dispatch_get_main_queue(), {() -> Void in 
          let contactViewController = CNContactViewController(forContact: contactRefetched) 
          contactViewController.contactStore = AppDelegate.getAppDelegate().contactStore 
          contactViewController.displayedPropertyKeys = keys 
          self.navigationController?.pushViewController(contactViewController, animated: true) 
         }) 
        } 
        catch { 
         print("Unable to refetch the selected contact.", separator: "", terminator: "\n") 
        } 
       } 
      }) 
     } 
    } 

    //ViewTwoDelegate Function 
    func didFetchContacts(contacts: [CNContact]) { 
     for contacts in contacts { 
      self.contacts.append(contacts) 
     } 

     saveLookout.reloadData() 
    } 

} 
+0

Willkommen zu Stapelüberlauf, Jon! Können Sie den gesamten Fehler, der in Ihrer Debug-Konsole angezeigt wird, kopieren und in Ihre Antwort einfügen? Wenn der Fehler nicht auf eine Zeile im Code zeigt, könnte es ein paar Dinge sein. Ich müsste den ganzen Fehler sehen, um es zu analysieren. –

+0

Danke! Ich hoffe, ich habe deine Frage richtig verstanden bc ich postete meinen gesamten Fehler in meinem Antwortabschnitt haha ​​ – jonB22

Antwort

1

Sie deklarieren delegate wie diese var delegate: ViewTwo! aber man kann nie Wert zuweisen. Wenn Sie also delegate.didFetchContacts([contacts]) anrufen, ist die delegatenil und Ihre App wird abstürzen. (Es scheint, Sie möchten delegate = self irgendwo in der viewDidLoad hinzufügen).


Sie müssen Ihre viewDidLoad Methode richtig schreiben. Verschiebe es, um sicherzustellen, dass es keine innere Funktion ist.

override func viewDidLoad() {} 
+0

@j Als ich delegate = self in meinem ViewDidLoad hinzufügte, stürzte die App immer noch ab. Entferne ich delegate.didFetchContacts ([Kontakte])? – jonB22

+0

@ jonB22 Gibt es einen neuen Fehler? Welche Linie stürzt ab? Sie können eine Ziel-C-Haltepunkte hinzufügen und sehen, welche Zeile abstürzt. –

+0

nein, der Fehler ist der gleiche und die Linie stürzt immer noch am KontaktPicker (... didSelectContact ..) Funktion – jonB22

Verwandte Themen