2015-07-02 80 views
2

我的應用程序是一個基本的東西,如電話號碼和位置的目錄。將會有很多條目,我將不得不每週更新一次數據庫,並且我不想依賴我的用戶使用App Store更新他們的應用程序,所以我希望數據在他們連接時更新互聯網,但我希望所有的數據都存儲在本地,這樣即使他們沒有互聯網接入,他們也可以使用它。對於我的第一個應用程序,它證明是相當棘手的:)如何使用將脫機工作的Parse創建數據庫?

我想我將不得不使用分析,所以我可以隨時更新數據庫,以及像Realm(https://realm.io/)或Core Data(希望不是核心數據:()。我讀到Parse的本地DataStore,如果有辦法讓它適合我的需求,我一定會使用它。我喜歡Realm的簡單性,如果我有辦法讓它工作如果PFObject或RLMObject被稱爲person,並且有兩個字符串(電話號碼和電話號碼),那麼這個電話號碼就是一個電話號碼,名稱,你將如何從Parse.com獲得該設備(本地存儲)?

這是一個額外的,我甚至不知道是否有可能*

當應用程序從App Store下載時,它可以從Parse下載數據嗎?就像在第二個用戶打開應用程序一樣,即使他們不再具有互聯網訪問權限,數據也會在本地存儲並可用於他們。

(我只知道斯威夫特,但可能能夠理解對象 - 如果有人在乎給我看一些代碼段)

任何幫助都將不勝感激:)

回答

1

喬從這裏境界。

首先從解析retreive一個對象,你需要做到這一點:

var query = PFQuery(className:"GameScore") 
query.whereKey("playerName", equalTo:"Sean Plott") 
query.findObjectsInBackgroundWithBlock { 
    (objects: [AnyObject]?, error: NSError?) -> Void in 

    if error == nil { 
    // The find succeeded. 
    println("Successfully retrieved \(objects!.count) scores.") 
    // Do something with the found objects 
    if let objects = objects as? [PFObject] { 
     for object in objects { 
     println(object.objectId) 
     } 
    } 
    } else { 
    // Log details of the failure 
    println("Error: \(error!) \(error!.userInfo!)") 
    } 
} 

你可以閱讀更多關於這個here

當你獲得你的對象,我會通過他們循環,你看這裏

for object in objects { 
    println(object.objectId) 
    } 

然後我會使用Realm的Realm().create(_:value:update:)(在下面的代碼中顯示)。你需要確保你有一個主鍵來使用它(我將使用parse的objectId作爲Realm中的主鍵)。這裏是Realm的how you set a primary key

的我會怎樣將它們導入境界會是這樣的(其中場地是類的對象存儲在域的方式)的一個例子:

let realm = Realm() 
    realm.write { 
    for object in objects { 
     realm.create(Venue.self, value: object, update: true) 
    } 
    } 

你可以閱讀更多有關導入here

最後,當你這樣做的邏輯取決於你。每次打開應用程序時都可以這樣做。將本地數據庫與服務器上的數據庫同步的一件事是,只需檢查另一個表(可能稱爲LastUpdated)即可。如果您需要更新您的本地數據庫,此表將讓您知道。總體來說,這是一個非常手動的過程,但它取決於情況以及如何構建應用程序。

+0

非常感謝你的幫助來自Realm的Joe幫助很大。我仍然在使用Realm時遇到問題,我使用了放在那裏的方法(將商店替換爲Venue,我的Realm Object類名稱),但它似乎沒有工作。當我查詢我的領域時,我沒有得到任何結果。另外,我無法使用Parse屬性並將它們傳送到它正在更新的Realm對象。對於主鍵,我這樣做了:'object.objectId = Businesses.primaryKey()',但我無法弄清楚如何將Parse中的其餘列與我在Realm Object中創建的屬性連接起來。 – Kulan

+0

您可以創建這樣的主鍵: 類人:對象{ 動態無功OBJECTID = 0 動態無功NAME = 「」 覆蓋靜態FUNC的PrimaryKey() - >字符串? { return「objectId」 } } 你是否在Realm()。中創建realm.write {}塊? – yoshyosh

+0

我正在做的主要關鍵部分。我忘了把它放在realm.write {}塊中,但是當我做時,Realm.write(){Realm().create(Businesses.self,value:object,update:true)},它給了我錯誤「不能用類型'(( - ) - > _')的參數列表調用寫入'我認爲這與寫入方法的參數有關,但我無法弄清楚它的含義,它只是說」 「Realm」。不完全確定它是什麼意思。 – Kulan

相關問題