2017-01-16 70 views
1

我試圖打開已經包含一些數據的設備上的領域同步,這些數據已經存在於服務器上。當新用戶連接到領域時,它應該將本地領域數據與同步的領域數據合併。但是,此代碼在初始同步發生之前啓動。由於尚未收到來自服務器的數據,因此應用會在同步領域創建一些記錄。當同步完成時,我看到兩次相同的數據。我剛創建的記錄和從服務器獲取的數據。使用相同的主鍵。Realm移動平臺內初始同步和具有相同主鍵的重複對象

下面

見代碼中的示例:

RLMRealmConfiguration *config = [[RLMRealmConfiguration alloc] init]; 
config.syncConfiguration = [[RLMSyncConfiguration alloc] initWithUser:user realmURL:self.realmURL]; 
NSError *error = nil; 
RLMRealm *newRealm = [RLMRealm realmWithConfiguration:config error:&error]; 
if(newRealm != nil && error == nil) 
{ 
    [newRealm beginWriteTransaction]; 

    for(ModelFolder *folder in [ModelFolder allObjectsInRealm:curRealm]) 
    { 
     ModelFolder *newFolder = [ModelFolder objectInRealm:newRealm forPrimaryKey:folder.uuid]; 
     if(newFolder == nil) 
      [ModelFolder createInRealm:newRealm withValue:folder]; 
    } 

    [newRealm commitWriteTransaction]; 
} 

有一種方法來檢測,該領域已完成初始同步?

UPD:更多的細節。

ModelFolder包含@property RLMArray<ModelBookmark *><ModelBookmark> *bookmarks;而當我創建文件夾,這等於一些文件夾,將在幾秒鐘內提取他們正確合併。但。 Folder對象內的書籤不會重複數據刪除,我們得到這樣的:

RLMResults <0x802082d0> (
[0] ModelFolder { 
    uuid = 2615AB34-1C08-4E7B-8D49-6E02EDBCDF89; 
    name = (null); 
    descr = (null); 
    shareURL = (null); 
    date = 1484566331137; 
    bookmarks = RLMArray <0x806c78d0> (
    [0] ModelBookmark { 
    uuid = C752FCEB-65CB-47C8-8CF4-6CA44C119ECC; 
    name = (null); 
    descr = (null); 
    shareURL = (null); 
    date = 1484566331137; 
    folderUuid = 2615AB34-1C08-4E7B-8D49-6E02EDBCDF89; 
    longitude = 27.54834598813616; 
    latitude = 53.91333128839566; 
    mapZoom = 11.73785983313041; 
    category = 0; 
    visible = 1; 
    }, 
    [1] ModelBookmark { 
    uuid = C752FCEB-65CB-47C8-8CF4-6CA44C119ECC; 
    name = (null); 
    descr = (null); 
    shareURL = (null); 
    date = 1484566331137; 
    folderUuid = 2615AB34-1C08-4E7B-8D49-6E02EDBCDF89; 
    longitude = 27.54834598813616; 
    latitude = 53.91333128839566; 
    mapZoom = 11.73785983313041; 
    category = 0; 
    visible = 1; 
    } 
); 
    tracks = RLMArray <0x806fb120> (

); 
    opened = 1; 
} 
) 

回答

1

不幸的是合併有序列表中目前不支持(直到https://github.com/realm/realm-core/issues/1206實現)。現在,您必須手動重複刪除列表項目,您可以使用RealmTasks應用程序中使用的相同解決方法,有關實施細節,請參閱https://github.com/realm/RealmTasks/pull/180

+0

有沒有辦法檢測到第一個同步完成?我不想上傳數據,然後修復重複內容,但是要獲取數據,刪除重複內容並上傳正確版本的數據。 –

+1

目前沒有,但這是我們正在努力。您可以通過https://github.com/realm/realm-cocoa/pull/4535跟蹤進度 – Dmitry