从iOS应用程序发送新值时始终获取AppSync初始值

从iOS应用程序发送新值时始终获取AppSync初始值,ios,pebble-watch,Ios,Pebble Watch,我正在为iOS应用程序创建Pebble companion应用程序。我已使用一些初始值设置了AppSync: Tuplet initial_values[] = { TupletCString(SYNC_KEY_LANGUAGE, language), TupletCString(SYNC_KEY_TOTAL_AMOUNT, totalAmount), TupletCString(SYNC_KEY_TODAY_AMOUNT, todayAmount

我正在为iOS应用程序创建Pebble companion应用程序。我已使用一些初始值设置了AppSync:

Tuplet initial_values[] = {
        TupletCString(SYNC_KEY_LANGUAGE, language),
        TupletCString(SYNC_KEY_TOTAL_AMOUNT, totalAmount),
        TupletCString(SYNC_KEY_TODAY_AMOUNT, todayAmount),
        TupletCString(SYNC_KEY_TRIP_NAME, tripName)
    };

    app_sync_init(&sync, sync_buffer, sizeof(sync_buffer), initial_values, 
                  ARRAY_LENGTH(initial_values), sync_tuple_changed_callback, 
                  sync_error_callback, NULL);
问题是,当我从iPhone推送新数据时,初始值被设置为我的文本层,而不是发送的数据:

static void sync_tuple_changed_callback(const uint32_t key, const Tuple* new_tuple, const Tuple* old_tuple, void* context) {
    switch (key) {
        case SYNC_KEY_TRIP_NAME: {
            text_layer_set_text(tripNameLayer, new_tuple->value->cstring);
            layer_mark_dirty((Layer *)tripNameLayer);
        }
            break;
        case SYNC_KEY_TOTAL_AMOUNT: {
            text_layer_set_text(totalAmountLayer, new_tuple->value->cstring);
            layer_mark_dirty((Layer *)totalAmountLayer);
        }
            break;
        case SYNC_KEY_TODAY_AMOUNT: {
            text_layer_set_text(todayAmountLayer, new_tuple->value->cstring);
            layer_mark_dirty((Layer *)todayAmountLayer);
            //storeData(STORAGE_KEY_TODAY_AMOUNT, (char *)new_tuple->value->cstring);
        }
            break;
        case SYNC_KEY_LANGUAGE: {
            // DO NOTHING
        }
            break;
        default: {
            debugMessage("default case");
        }
            break;
    }
}
这是我在iPhone端使用的代码:

    NSDictionary *tripInfo = @{
                            @(SyncKeyTripName) : @"Denver",
                            @(SyncKeyLanguage) : @"en",
                            @(SyncKeyTotalAmount) : @"154.43",
                            @(SyncKeyTodayAmount) : @"23.50"
                          };

[self.watch appMessagesPushUpdate:tripInfo
                               onSent:^(PBWatch *watch, NSDictionary *update, NSError *error) {
                                   if (error) {
                                       NSLog(@"error sending update! %@", error);
                                   } else {
                                       NSLog(@"update: %@", update);
                                   }
                               }];
我已经设置了我的手表按钮来清除这些层中的任何值,这就是我如何知道应用程序何时从手机获得更新


为什么AppSync持续使用旧数据而不是新数据?

结果表明,在多次调用
app\u sync\u init
函数时,就会出现这种行为。由于某种原因,在安装应用程序时,它被调用了两次。删除无关调用后,我的回调包含新数据,而不是首字母。

您应该使用
APP\u LOG
显示正在发送的值,以确保它确实是新值。不需要将图层标记为“脏”<代码>文本\图层\设置\图层为您执行此操作。