运行以下代码时,为什么会出现此错误? :
"内部错误" (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")
答案 0 :(得分:4)
我也遇到过这种情况。它似乎是cloudkit中的一个错误,而且 - 从我所知道的 - 当你试图重新使用"资产创建链的任何部分时就会发生这种错误。"
换句话说,您有一些初始数据,您从该数据创建图像,将其写入文件,将该文件加载到CKAsset
,然后将CKRecrod
加载到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;
。在我的实验中,如果你重新使用这些组件中的任何一个......或者它们恰好相同(也就是说,你创建了一个图像,那么你恰好在以后创建一个新的但相同的图像)你&# 39;我会看到这个错误。
例如,以下代码可靠地重新创建&#34; no auth token&#34;保存记录时出错。它所做的就是创建一个资产数组并将其放入记录中:
int tempVal = i; //force the temp value to be different every time
只需将第三行更改为:
CKAsset
完全解决错误。
此外,即使我尝试使用先前已使用的 CKAsset
**中的值,也会出现此错误 int tempVal = 0xf
例如,在第一个资源中使用int secondTempVal = 0xf
,然后在另一个CKAsset
中使用CKAsset
也会生成&#34;无身份验证令牌&#34;错误。
在我的情况下,我能够强制资产价值始终是一个独特的价值,并完全解决了问题。在您的情况下,我建议以下可能的解决方法:
<div id="container">
<div id="box"></div>
</div>
<select id="menu">
<option value="red">Red</option>
<option value="blue">Blue</option>
<option value="black">Black</option>
<option value="green">Green</option>
</select>
的图像。答案 1 :(得分:1)
这不是对特定问题的答案(已由公认的答案解决),但是它解决了另一个会产生相同错误消息的问题,因此它可能对其他人有用:
我有一个使用CoreData + Cloudkit和.public
数据库的应用程序,即我对NSPersistentCloudKitContainer
使用的描述
description.cloudKitContainerOptions!.databaseScope = .public
每当我更改CloudKit架构时,都必须使用来重新初始化
do {
try self.initializeCloudKitSchema()
} catch {
print("Could not initialize schema, error \(error)")
}
这会产生错误
"Internal Error" (1/1000); "No authToken received for asset"
尽管我没有在模型中使用任何资产。
我现在意识到,它与.public
数据库有关:
一旦我注释掉将数据库范围设置为.public
的指令后,重新初始化就可以正常工作了。
现在,CloudKit模式独立于数据库类型(.private
或.public
)。因此,架构的重新初始化需要以下条件:
PS:我知道我现在应该写一个错误报告,但是我停止这样做:我的错误报告(大约15个)几乎都没有得到答复或处理,因此这是不值得的。