Cloudant 不存储通过 Bluemix "Data for iOS 8" 发送的对象数据
Cloudant does not not store object data sent via Bluemix "Data for iOS 8"
我正在尝试通过 iOS 应用程序在 Cloudant 数据库中存储一个简单对象(具有两个字符串属性的自定义 class)。我正在使用 Bluemix iOS SDK,特别是 "Data for iOS 8"。到目前为止,我正在尝试应用来自 IBM Bluemix 文档的 Swift 编程语言示例。
存储对象的代码来自教程,如果有的话,也只是稍加改动。下面的代码包含在文本字段编辑完成时调用的函数中。
var remoteStore:CDTStore!
// initialize an instance of the IMFDataManager
let manager:IMFDataManager = IMFDataManager.sharedInstance()
let name = "pricingdb"
var testData = TestData(firstName: "aaaa", lastName: "bbbbb")
// Create remote store
manager.remoteStore(name, completionHandler: { (createdStore:CDTStore!, error:NSError!) -> Void in
if nil != error {
//Handle error
} else {
remoteStore = createdStore
println("Successfully created store: \(remoteStore.name)")
// Register class with remote store
remoteStore.mapper.setDataType("TestData", forClassName: NSStringFromClass(TestData.classForCoder()))
// Actually save the object to Bluemix
remoteStore.save(testData, completionHandler: { (savedObject:AnyObject!, error:NSError!) -> Void in
if nil != error {
//Save was not successful, handler received an error
println("Error: \(error)")
} else {
// Use the result
println("Saved revision: \(savedObject)")
}
})
}
})
我要存储到的 Cloudant 数据库存在。我可以连接到数据存储并且对象也已保存,控制台输出为:
HTTP_Status: 201
JSON Body: {
id = 6dfde55449915faa92c471bd0ecd89d6;
ok = 1;
rev = "1-419dfa2a14026c4c18545723e8f990fa";
}
Saved revision: <pricingtester.TestData: 0x7f91f1c6e2f0>
但是,当查看上面的 JSON 正文时,我希望看到其中的对象数据,即使它不会显示在那里,t/shouldn 我也希望看到它在创建的数据库条目中。但是查看Cloudant dashboard时对应的数据库条目如下:
{
"_id": "6dfde55449915faa92c471bd0ecd89d6",
"_rev": "1-419dfa2a14026c4c18545723e8f990fa",
"@datatype": "TestData"
}
我可能遗漏了什么?
出现了一个相关问题:
在上面的代码中,商店总是被创建。如果它存在,则不会重新创建它,但会引用该存储。如果我知道该商店存在(确实如此),我如何在不首先尝试创建它的情况下获得对该商店的引用?
能否提供测试数据的源代码class?对于 swift classes,String 当前必须使用 NSString (ObjC) 而不是 Swift String(例如 var make:NSString)
我正在尝试通过 iOS 应用程序在 Cloudant 数据库中存储一个简单对象(具有两个字符串属性的自定义 class)。我正在使用 Bluemix iOS SDK,特别是 "Data for iOS 8"。到目前为止,我正在尝试应用来自 IBM Bluemix 文档的 Swift 编程语言示例。
存储对象的代码来自教程,如果有的话,也只是稍加改动。下面的代码包含在文本字段编辑完成时调用的函数中。
var remoteStore:CDTStore!
// initialize an instance of the IMFDataManager
let manager:IMFDataManager = IMFDataManager.sharedInstance()
let name = "pricingdb"
var testData = TestData(firstName: "aaaa", lastName: "bbbbb")
// Create remote store
manager.remoteStore(name, completionHandler: { (createdStore:CDTStore!, error:NSError!) -> Void in
if nil != error {
//Handle error
} else {
remoteStore = createdStore
println("Successfully created store: \(remoteStore.name)")
// Register class with remote store
remoteStore.mapper.setDataType("TestData", forClassName: NSStringFromClass(TestData.classForCoder()))
// Actually save the object to Bluemix
remoteStore.save(testData, completionHandler: { (savedObject:AnyObject!, error:NSError!) -> Void in
if nil != error {
//Save was not successful, handler received an error
println("Error: \(error)")
} else {
// Use the result
println("Saved revision: \(savedObject)")
}
})
}
})
我要存储到的 Cloudant 数据库存在。我可以连接到数据存储并且对象也已保存,控制台输出为:
HTTP_Status: 201
JSON Body: {
id = 6dfde55449915faa92c471bd0ecd89d6;
ok = 1;
rev = "1-419dfa2a14026c4c18545723e8f990fa";
}
Saved revision: <pricingtester.TestData: 0x7f91f1c6e2f0>
但是,当查看上面的 JSON 正文时,我希望看到其中的对象数据,即使它不会显示在那里,t/shouldn 我也希望看到它在创建的数据库条目中。但是查看Cloudant dashboard时对应的数据库条目如下:
{
"_id": "6dfde55449915faa92c471bd0ecd89d6",
"_rev": "1-419dfa2a14026c4c18545723e8f990fa",
"@datatype": "TestData"
}
我可能遗漏了什么?
出现了一个相关问题: 在上面的代码中,商店总是被创建。如果它存在,则不会重新创建它,但会引用该存储。如果我知道该商店存在(确实如此),我如何在不首先尝试创建它的情况下获得对该商店的引用?
能否提供测试数据的源代码class?对于 swift classes,String 当前必须使用 NSString (ObjC) 而不是 Swift String(例如 var make:NSString)