unidos tienda tarjeta puedes pais pago momento metodo informacion este estados eliminar cuenta credito crear cambiar apple app ios parse.com parse-server

tarjeta - ParseError de iOS: Intento cambiar un Id de objeto por uno que ya conoce la Tienda fuera de lĂ­nea



en este momento no puedes cambiar la informacion de la tienda de tu cuenta (2)

Tengo un problema regular con mi proyecto, el uso de Parse Server. En primer lugar, llamo a una función de Parse Cloud para rellenar la lista de datos de un usuario:

var dataSet: Set<MyData>? func loadData(withParameters parameters: [String : Any]) { PFCloud.callFunction(inBackground: "loadData", withParameters: parameters) { (success, error) in if let objects = success as? [[String : Any]] { let dataTable: [MyData] = objects.map({ (object) -> MyData in let myData = MyData(dataSource: PFObject(className: "MyData", dictionary: object)) myData.dataSource?.objectId = object["objectId"] as? String return myData }) if self.dataSet == nil { self.dataSet = [] } self.dataSet = Set(dataTable) } } }

En el código mencionado anteriormente, tengo que establecer el objectId porque sin esto, no importa cuántos objetos obtenga de Parse, cuando reduzco la matriz a un conjunto con la última instrucción, termino con un solo objeto en ella.

Sin embargo, aunque esto funciona, cuando vuelvo a llamar a esta función para actualizar los datos del usuario, myData.dataSource?.objectId = temp["objectId"] as? String este error en myData.dataSource?.objectId = temp["objectId"] as? String Línea de myData.dataSource?.objectId = temp["objectId"] as? String :

Intento cambiar un objectId por uno que ya conoce la tienda sin conexión.

Intenté encontrar información al respecto pero nada muy relevante ...

Gracias por tu ayuda.


Esta no es realmente una respuesta, pero es demasiado tiempo para un comentario:

Entiendo lo siguiente:
Su función de nube loadData devuelve success , que es una matriz de diccionarios o, probablemente en caso de error, nil . Si se devuelve nil , no haces nada.
Si se devuelve una matriz, se la denomina objects .
Esta matriz se asigna a una matriz de elementos de tipo MyData .
Para cada elemento devuelto por la función en la nube, llamado object , se MyData una instancia MyData utilizando como dataSource una nueva instancia PFObject de la clase MyData y propiedades proporcionadas por el diccionario del objeto.
No entiendo la siguiente afirmación por la que asigna el objectId de objeto del objeto devuelto por la función de nube al PFObject recién creado: Hasta donde yo sé, objectIds debe ser único y no puede (o al menos no debería) asignarse a otros PFObjects .
Pero dijiste que tienes que hacer esto o terminaste con un solo elemento en el conjunto resultante (mira a continuación).
De todos modos, ahora tiene una matriz de instancias dataTable en dataTable .
Luego, inicializa dataSet , que no es necesario, ya que de todos modos se sobrescribirá en su última declaración.
Esta declaración hace un conjunto de la matriz de dataTable .

Ahora, cuando obtiene un elemento único en este conjunto en caso de que no establezca la propiedad objectId de los elementos de la matriz dataTable , esto significa que todos los elementos de esta matriz son el mismo objeto. Y esto significa que su función init

MyData(dataSource: PFObject(className: "MyData", dictionary: object))

devuelve siempre el mismo objeto, y este objeto se convierte en uno diferente estableciendo su propiedad objectId . Esto es muy extraño para mi Por favor revisa lo que está pasando allí.

Ahora, si llama a loadData una vez más para actualizar los datos, la función de nube probablemente devuelva algunos o todos los objetos anteriores nuevamente. En este caso, asignaría un antiguo objectId . De objectId , que ya ha sido asignado anteriormente a un PFObject creado en la función de mapa, a otro PFObject creado PFObject allí, que no está permitido, por lo tanto el mensaje de error.

Para abreviar:
Si el mismo objeto se devuelve de la función de nube repetidamente, no debe crear diferentes PFObjects para ellos y asignarles el mismo objectId .

¡Espero que esto ayude!


http://parseplatform.org/Parse-SDK-iOS-OSX/api/Protocols/PFSubclassing.html

Si una subclase de PFObject cumple con PFSubclassing y llama a PFObject. + RegisterSubclass, Parse framework podrá usar esa clase como clase nativa para un objeto de nube Parse.

Por ejemplo:

1.Cree su subclase de PFObject

import Parse class Question: PFObject, PFSubclassing { @NSManaged var category: String? @NSManaged var text: String @NSManaged var image: PFFile? @NSManaged var answerType: String @NSManaged var order: NSNumber static func parseClassName() -> String { return "Question" } } class User: PFUser { @NSManaged var fullname: String }

2.Registrar la subclase

extension Parse { class func registerSubclasses() { User.registerSubclass() Question.registerSubclass() } }

3. Configurar el servicio de análisis una vez que se inicie la aplicación

Parse.registerSubclasses() Parse.enableLocalDatastore() Parse.setApplicationId(PARSE_APP_ID, clientKey: PARSE_APP_KEY)

4. Ahora PFUser == User , Question == PFObject(className: "Question")

5. Funciona para Cloud Function

PFCloud.callFunctionInBackground("fetchQuestions", withParameters: parameters) { questions, error in if let questions = questions as? [Question] { completion?(questions, nil) } else { completion?(nil, error) } }

Nota: el código rápido puede ser anterior, debe haber algunos cambios si se usa una versión rápida más rápida.