2017-07-08 2 views
1

Warum bekomme ich diesen Fehler, wenn ich den folgenden Code ausführen? :cloudkit error no authToken empfangen für Asset

"Interner Fehler" (1/1000); „Nein authToken erhielt für das Asset“

Ich denke, es hat etwas mit dem setObject Code in der letzten Zeile zu tun.

let documentsDirectoryPath:NSString = NSSearchPathForDirectoriesInDomains(.documentDirectory, .userDomainMask, true)[0] as NSString 
var imageURL: URL! 

let imageData = UIImageJPEGRepresentation(self.newImage, 1.0) 
let path:String = documentsDirectoryPath.appendingPathComponent(self.newImage.description) 
try? UIImageJPEGRepresentation(self.newImage, 1.0)!.write(to: URL(fileURLWithPath: path), options: [.atomicWrite]) 
imageURL = URL(fileURLWithPath: path) 
try? imageData?.write(to: imageURL, options: [.atomicWrite]) 

let imageAsset:CKAsset? = CKAsset(fileURL: URL(fileURLWithPath: path)) 


curImages = record["Images"] as! [CKAsset] 
curImages.append(imageAsset!) 

print("saving image") 
record.setObject(curImages as CKRecordValue?, forKey: "Images") 

Antwort

3

Ich habe das auch schon gesehen. Es scheint sich um einen Fehler in cloudkit zu handeln, und - soweit ich es beurteilen kann - passiert es, wenn Sie versuchen, einen Teil der "Asset-Erzeugungskette" wiederzuverwenden.

Mit anderen Worten: Sie haben einige erste Daten, erstellen Sie ein Bild aus diesen Daten, schreiben Sie es in eine Datei, laden Sie die Datei in einem CKAsset, dann Sie die CKAsset in die CKRecrod laden. Wenn Sie in meinen Experimenten eine dieser Komponenten erneut verwenden ... oder wenn sie zufällig identisch sind (das heißt, Sie erstellen ein Bild, dann erstellen Sie später ein neues, aber identisches Bild), Ich sehe diesen Fehler.

Zum Beispiel erstellt der folgende Code zuverlässig den Fehler "kein Authentifizierungs-Token" beim Speichern eines Datensatzes. Denn es macht nicht ist eine Reihe von Vermögenswerten und legt sie in den Datensatz erstellen:

for (int i = 0; i <= maxPlayers; i++) 
{ 
    int tempVal = 0xf; 
    NSData *tempData = [[NSData alloc] initWithBytes:&tempVal length:sizeof(tempVal)]; 
    NSString *tempDataFilepath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"temp%d.dat",i]]; 
    [tempData writeToFile:tempDataFilepath atomically:YES]; 
    NSURL *tempDataURL = [NSURL fileURLWithPath:tempDataFilepath]; 
    someArray[i] = [[CKAsset alloc] initWithFileURL:tempDataURL ]; 
} 

someRecord[SOME_FIELD_NAME] = someArray; 

einfach die dritte Zeile ändern zu: löst

int tempVal = i; //force the temp value to be different every time 

vollständig den Fehler.

Außerdem tritt dieser Fehler auf auch wenn ich versuchte, einen Wert in a **verschiedeneCKAsset zu verwenden, die bereits in einer früheren CKAsset Zum Beispiel verwendet, int tempVal = 0xf im ersten Asset verwendet wird, dann int secondTempVal = 0xf mit in einem anderen CKAsset erzeugt auch den "no auth token" Fehler.

In meinem Fall war ich in der Lage, den Vermögenswert zu zwingen, immer ein einmaliger Wert zu sein, und löste das Problem vollständig. In Ihrem Fall schlage ich folgende mögliche Umgehungsschritte vor:

  1. Überprüfen Sie, ob Sie identische Bilder für Ihre Assets verwenden. Wenn dies der Fall ist, versuchen Sie, die Bilder für jedes neue CKAsset leicht zu ändern.
  2. Wenn Sie identische Bilder erneut verwenden müssen, versuchen Sie, den Datensatz zu speichern, nachdem Sie die einzelnen Assets festgelegt haben. Ich weiß nicht, ob das das Problem lösen wird, und es erhöht sicherlich Ihren Netzwerkverkehr. Aber es ist ein Experiment wert, um zu sehen, ob es hilft.
  3. In dieser Frage Saving CKAsset to CKRecord in CloudKit produces error: "No authToken received for asset" war das OP in der Lage, separate Kopien der Image-Datei zu erstellen, die letztlich das Problem löste.
  4. Öffnen Sie einen Fehler mit Apple. Ich habe mich nicht darum gekümmert, da ich immer mehr Zeuge geworden bin, wie ähnliche Fehlerberichte jahrelang ohne Aufmerksamkeit geöffnet wurden. Aber wer weiß, vielleicht hast du mehr Glück.
+0

Das Problem war, dass ich identische Bilder verwendete ... Danke! – Shekar

Verwandte Themen