Azure移动服务脱机数据同步 - 提供的项目无效

时间:2015-08-21 20:12:49

标签: ios objective-c azure core-data azure-mobile-services

我使用Azure移动服务作为iOS应用的后端。我设置了所有可以使用离线同步的功能,即使没有网络连接,也可以查看,添加或修改数据。我现在正在测试,我遇到了一个错误:"提供的项目无效"当我尝试同步数据时。

这就是我正在做的事情:

我在syncTableWithName中添加了一名新运动员:@"运动员"有了这个:

NSDictionary *newItem = @{@"firstname": @"Charles", @"lastname": @"Lambert", @"laterality" : @"Orthodox"};

        [self.athletesService addItem:newItem completion:^{
            NSLog(@"New athlete added");
        }];

这是addItem函数:

-(void)addItem:(NSDictionary *)item completion:(CompletionBlock)completion
{
    // Insert the item into the Athlete table
    [self.syncTable insert:item completion:^(NSDictionary *result, NSError *error)
     {
         [self logErrorIfNotNil:error];

         // Let the caller know that we finished
         dispatch_async(dispatch_get_main_queue(), ^{
             completion();
         });
     }];
}

现在一切都很好,项目在syncTable中。问题是当我尝试与Azure移动服务同步时。这是我正在调用的syncData函数:

-(void)syncData:(CompletionBlock)completion
{   
    // push all changes in the sync context, then pull new data
    [self.client.syncContext pushWithCompletion:^(NSError *error) {
        [self logErrorIfNotNil:error];
        [self pullData:completion];
    }];
}

pushWithCompletion让我错误:"提供的项目无效。"对于之后调用的pullData函数也是如此:

-(void)pullData:(CompletionBlock)completion
{
    MSQuery *query = [self.syncTable query];

    // Pulls data from the remote server into the local table.
    // We're pulling all items and filtering in the view
    // query ID is used for incremental sync
    [self.syncTable pullWithQuery:query queryId:@"allAthletes" completion:^(NSError *error) {
        [self logErrorIfNotNil:error];

        // Let the caller know that we finished
        dispatch_async(dispatch_get_main_queue(), ^{
            completion();
        });

    }];
}

我已经尝试直接插入MSTable并且工作正常。当我使用MSSyncTable时,我遇到了这个错误。虽然当我在我的数据库中手动插入数据并且我同步我的上下文时,我可以获取数据并在我的UITableView中显示。

Here is my Athlete table 期待看到你们对此的看法。非常感谢!

感谢@phillipv,我刚刚编辑了我的问题。 当我像使用NSDictionary一样添加项目时,我遇到了错误"提供的项目无效"。所以我尝试添加一个项目,先将它插入我的managedObjectContext然后调用:

NSDictionary *dict = [MSCoreDataStore  tableItemFromManagedObject:newAthlete];

然后,当我尝试同步时,我收到错误:"提供的项目没有有效的ID。"

我觉得我正在经历一个圈子......:S

1 个答案:

答案 0 :(得分:2)

这似乎是iOS SDK中的一个错误,因为在Push呼叫期间,不应该在给予操作的对象中公开多对一关系。

创建了以下错误,其中包含有关GitHub的更多详细信息:https://github.com/Azure/azure-mobile-services/issues/779

错误消息的原因是由于关系是对象上的NSSet,并且NSJSONSerializer因为不知道如何将其转换为JSON而抛出。