2015-02-11 13 views
5

Prima di tutto, so che domande simili sono già state fatte prima e ho provato a seguire il consiglio di this risposta stackoverflow qui inutilmente. Ho anche provato ad aggiungere la sintesi di questo come commento, ma non ho ancora abbastanza Rep :(Fondamentalmente sto cercando di usare PFSubclassing per estendere il modello PFUser di Parse. Quindi, ecco il mio codice corrispondente:Sottoclasse PFUser di Parse in Swift

Utente .swift:

import Foundation 
import CoreLocation 

class User : PFUser, PFSubclassing { 

    override init() { 
     super.init() 
    } 

    convenience init(email: String!) { 
     self.init() 

     self.email = email 
     self.username = email 

    } 

    // don't need to call User.registerSubclass() in AppDelegate because this 
    // is handling that here 
    override class func load() { 
     self.registerSubclass() 
    } 

    // Commented out because this is extending PFUser 
    // override class func parseClassName() -> String! { 
    //  return "PFUser" 
    // } 
} 

Risultato sul Test:

-[PFObject _loadSensitiveUserDataFromKeychainItemWithName:]: unrecognized selector sent to instance 0x7f98ebc1c250 

sto anche facendo il seguente nel mio Bridging-Header:

#import <Parse/Parse.h> 
#import <Parse/PFObject+Subclass.h> 

Se non-comment "parseClassname() in User.swift" ottengo:

failed: caught "NSInvalidArgumentException", "Cannot initialize a PFUser with a custom class name." 

Il che mi porta a credere che la creazione delle interfacce è almeno in parte di lavoro.

Sulla base di tutti i consigli che ho visto, non riesco a capire cosa sto facendo male. C'è anche un open bug che produce lo stesso messaggio di errore, ma è causato dall'utilizzo dell'archivio dati locale di Parse e non ho configurato nulla di quello.

A questo punto mi sento come se mi mancasse qualcosa di ovvio, o sono stato colpito dallo stesso bug di cui sopra. Eventuali suggerimenti?

risposta

4

Ok, ho risolto il mio problema qui attraverso tentativi ed errori. Essenzialmente sembra che un PFUser memorizzato nella cache abbia causato problemi. All'inizio, Parse stava caricando lo stato di accesso dall'emulatore che era in conflitto con la sottoclasse User appena registrata.

Per risolvere questo problema è possibile:

  1. Riavvia l'emulatore.
  2. Chiama PFUser.logOut() subito dopo Parse.setApplicationId() in AppDelegate per scaricare l'utente memorizzato nella cache.

Speriamo che questo aiuti qualcun altro in futuro!

+2

sto anche provando a sottoclasse 'PFUser'. ottieni la sottoclasse quando chiami 'User.currentUser()'? perché sto ricevendo un 'PFUser'. –

0

Ho risolto questo problema modificando il controller di visualizzazione iniziale. Non ha registrato l'utente perché non è passato attraverso il controller di visualizzazione che ha dichiarato/identificato in precedenza chi era l'utente.

Quello che ho fatto in particolare:

  1. Impostare il controller della vista iniziale, per il controller che cattura chi è l'utente e quindi segue il tuo passato modo in cui si desidera essere.
  2. Riavvia il simulatore.