我正在为iOS应用程序创建一个Pebble伴侣应用程序。我已经为我的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会不断使用旧数据而不是新数据?
答案 0 :(得分:1)
当多次调用app_sync_init
函数时,会显示出此行为。出于某种原因,我在设置应用程序时将其调用了两次。一旦我删除了无关的调用,我的回调就包含新数据,而不是初始数据。