2015-10-23 11 views
7

ho questa variabile in un file veloce:Xcode 7.1: Proprietà con mantenere o attributo forte deve essere del tipo di oggetto

var adbk: ABAddressBook! 

che è sempre stato bene, fino a quando Xcode 7.1. Ora lamenta "La proprietà con retain o l'attributo strong deve essere di tipo di oggetto." L'errore si trova nel file -Swift.h. Qualche idea su cosa è cambiato che potrebbe causare questo e come risolverlo?

+1

non si dovrebbe memorizzare un ABAddressBookRef invece? ABAddressBook è una struttura. O liberati di! assegnandolo in init o usa un? se potrebbe non essere impostato. –

+0

A volte può essere nullo. L'ho cambiato in? e ancora ottengo lo stesso errore. E cambiarlo in ABAddressBookRef non aiuta neanche. – RyJ

+0

Questo potrebbe essere il modo sottile di Apple per costringermi a passare a CNContactStore. – RyJ

risposta

3

Questo errore si verifica se la classe Swift dichiara alcune proprietà di AdressBook e questa classe fa parte del progetto misto Swift/ObjC. Xcode genera quindi un'intestazione di bridging Swift, dove questa proprietà diventa (non anatomica, forte), che è applicabile solo agli oggetti, non alle strutture.

Ho riscontrato un problema simile quando avevo bisogno di passare ABRecordRef dalla classe Objective-C alla classe Swift: Xcode non mi piaceva la mia proprietà ABRecordRef in Swift. Così ho finito per fare che la proprietà privata, in modo che non viene esportato l'intestazione di ponte, e l'aggiunta di nuovo metodo in classe Swift per ricevere ABRecordRef:

class: PersonDetails { 

     private var selectedPerson: ABRecorfRef? 

     func setPerson(person: ABRecordRef) { 
      selectedPerson = person 
     } 
    } 

e quindi è possibile chiamare

[personDetails setPerson: person]; 

dalla classe Objective-C.

0

ABAddressBook è deprecato

@available(iOS, introduced=2.0, deprecated=9.0, message="use CNContactStore") 
public typealias ABAddressBookRef = ABAddressBook 

in modo che io penso che si debba usare CNContactStore

Problemi correlati