2017-07-08 1 views
1

次のコードを実行すると、このエラーが発生します。 :クラウドキットエラーアセットのauthTokenが受信されません

"内部エラー"(1/1000); 「資産のために受け取ったauthTokenはありません」

最後の行のsetObjectコードと関係があると思います。

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") 

答えて

3

これも発生しました。クラウドキットのバグと思われます。私が知る限り、「資産創造チェーン」の一部を再利用しようとすると起こります。

つまり、初期データがあり、そのデータからイメージを作成し、それをファイルに書き込んだ後、そのファイルをCKAssetにロードした後、CKAssetCKRecrodにロードします。私の実験では、それらのコンポーネントのいずれかを再使用する場合、またはそれらがちょうど同じになる場合(つまり、イメージを作成した後、後で新しいイメージを作成する場合)このエラーが表示されます。

たとえば、次のコードは、レコードを保存するときに「no auth token」エラーを確実に再作成します。

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; 

単純に三行目を変更:

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

が完全にエラーを解決してそれがないすべてがレコードに資産や場所、それをの配列を作成することです。

また、このエラーは私はCKAsset異なるの値を使用しようとした場合であっても**それが既にint secondTempVal = 0xfを使用して、その後、最初のアセットにint tempVal = 0xfを使用して、例えば前CKAssetで使用したを発生CKAssetでは、「no auth token」エラーも発生します。

私の場合、私は資産価値を常にユニークな値にして、問題を完全に解決することができました。あなたの場合、次のような回避策を提案します:

  1. アセットに同じイメージを使用しているかどうかを確認してください。もしそうなら、それぞれ新しい画像を少し変更してみてください。CKAsset
  2. 同じイメージを再使用する必要がある場合は、各アセットを設定した後でレコードを保存してみてください。それが問題を解決するかどうかはわかりませんが、確かにネットワークトラフィックが増加します。しかし、それが役立つかどうかを確認する実験は価値があります。
  3. この質問では、Saving CKAsset to CKRecord in CloudKit produces error: "No authToken received for asset"は、問題を最終的に解決したイメージファイルの別個のコピーを作成することができました。
  4. Appleにバグを公開します。同じようなバグレポートが何年も注目されずに開いているのを見て悲しいほど成長したので、私はこれをやっていることを気にしなかった。しかし、誰が知っている、あなたはより良い運を持っているかもしれません。
+0

問題は同じ画像を使用していたことでした...ありがとう! – Shekar

関連する問題