Я пытаюсь сохранить простой объект (пользовательский класс с двумя свойствами String) в базе данных Cloudant из приложения iOS. Я использую Bluemix iOS SDK, в частности «Данные для iOS 8». Пока что я пытаюсь применить примеры для языка программирования Swift из документации IBM Bluemix.
Код для хранения объекта взят из руководств и был лишь слегка адаптирован, если вообще был адаптирован. Приведенный ниже код содержится в функции, которая вызывается при редактировании текстового поля.
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 выше, я ожидаю увидеть там данные объекта, и даже если они не будут/не должны отображаться там, я ожидаю увидеть их в созданной записи базы данных. Но соответствующая запись в базе данных при проверке панели управления Cloudant выглядит следующим образом:
{
"_id": "6dfde55449915faa92c471bd0ecd89d6",
"_rev": "1-419dfa2a14026c4c18545723e8f990fa",
"@datatype": "TestData"
}
Что я мог упустить?
Возник связанный с этим вопрос: в приведенном выше коде всегда создается хранилище. Если он существует, он не воссоздается, а создается ссылка на это хранилище. Если я знаю, что магазин существует, а он существует, как я могу получить ссылку на этот магазин, не пытаясь сначала его создать?