2016-04-12 88 views
0

我正在通過向它添加2000條記錄來測試Realm。問題在於,當我停止運行應用程序時,即使任何行都沒有執行,deleteAllObject方法也不會調用。我認爲問題在beginWriteTransaction方法中。Realm在停止運行應用程序後無法工作?

這是我的代碼:

RLMRealm *realm = [RLMRealm defaultRealm]; 

    [realm beginWriteTransaction]; 

    [realm deleteAllObjects]; 

    [realm commitWriteTransaction]; 

    for (int i = 0 ; i < 2000; i++) { 

     [realm beginWriteTransaction]; 

     PeopleInformation *info = [[PeopleInformation alloc] init]; 

     info.name = [NSString stringWithFormat:@"%@ %d",@"Rohit",i]; 
     info.city = @"Delhi"; 

     [realm addObject:info]; 
     [realm commitWriteTransaction]; 

    } 

NSLog(@"all object %@", [PeopleInformation allObjects]); 
+0

你是什麼意思'問題是,當我停止運行應用程序...'?你是否明確地試圖在執行中斷程序? – TiM

回答

0

如果你的代碼在第一[realm beginWriteTransaction];聲明暫停,這似乎暗示着另一寫事務已經打開其他地方。

領域一次只允許一個事務修改磁盤上的數據,它故意停止任何新的事務,直到當前事務完成。我建議爲初學者尋找。您可以通過-[RLMRealm inWriteTransaction]屬性查看RLMRealm是否已經在交易中。 :)

此外,如果批量寫入儘可能少的事務,則Realm工作得更好。由於您正在爲該for循環中的每個迭代打開和關閉一個事務,因此您在那裏創建了2000個單獨的事務,這很容易使Realm減速。

您的代碼可能運行得更快,如果你的結構是這樣的,而不是:

[realm beginWriteTransaction]; 
for (int i = 0 ; i < 2000; i++) { 
    PeopleInformation *info = [[PeopleInformation alloc] init]; 

    info.name = [NSString stringWithFormat:@"%@ %d",@"Rohit",i]; 
    info.city = @"Delhi"; 

    [realm addObject:info]; 
} 
[realm commitWriteTransaction]; 

讓我知道,如果這有助於在所有!

+0

感謝它真的幫助完整。那麼我們在這裏添加一批? –

+0

我的榮幸!是的,你將所有的對象插入只分配到一個寫事務中。 – TiM