我的卵石手表内运行了一些 C 代码。它每次都以键值对的形式接收一些数据。它正在接收 5 条数据,每条数据都有正确的键和值,如下所示:
Key: 5 Value: '0'
Key: 6 Value: '10'
Key: 7 Value: '20'
Key: 8 Value: '30'
Key: 9 Value: '40'
鹅卵石一次接收其中一对,每次它执行以下函数时都会调用(上一行SimpleMenuItem chats[5];
:)
void in_received_handler(DictionaryIterator *received, void *context) {
dataReceived = dict_read_first(received);
APP_LOG(APP_LOG_LEVEL_DEBUG, "read first");
while (dataReceived != NULL){
APP_LOG(APP_LOG_LEVEL_DEBUG, dataReceived->value->cstring);
char keystr[10];
snprintf(keystr, 10, "Key: %d", (int)dataReceived->key);
APP_LOG(APP_LOG_LEVEL_DEBUG, keystr);
snprintf(keystr, 10, "Index: %d", (int)dataReceived->key -5);
APP_LOG(APP_LOG_LEVEL_DEBUG, keystr);
chats[dataReceived->key - 5] = (SimpleMenuItem){
// You should give each menu item a title and callback
.title = dataReceived->value->cstring,
.callback = selected_chat,
};
dataReceived = dict_read_next(received);
APP_LOG(APP_LOG_LEVEL_DEBUG, "read again");
}
layer_mark_dirty((Layer *)instant_chats);
}
然后将以下内容输出到卵石日志(这是我认为正确的):
[DEBUG] sr.c:195: read first
[DEBUG] sr.c:197: 0
[DEBUG] sr.c:200: Key: 5
[DEBUG] sr.c:219: Index: 0
[DEBUG] sr.c:243: read again
[DEBUG] sr.c:195: read first
[DEBUG] sr.c:197: 10
[DEBUG] sr.c:200: Key: 6
[DEBUG] sr.c:219: Index: 1
[DEBUG] sr.c:243: read again
[DEBUG] sr.c:195: read first
[DEBUG] sr.c:197: 20
[DEBUG] sr.c:200: Key: 7
[DEBUG] sr.c:219: Index: 2
[DEBUG] sr.c:243: read again
[DEBUG] sr.c:195: read first
[DEBUG] sr.c:197: 30
[DEBUG] sr.c:200: Key: 8
[DEBUG] sr.c:219: Index: 3
[DEBUG] sr.c:243: read again
[DEBUG] sr.c:195: read first
[DEBUG] sr.c:197: 40
[DEBUG] sr.c:200: Key: 9
[DEBUG] sr.c:219: Index: 4
[DEBUG] sr.c:243: read again
所以,虽然一切似乎都是正确的(对我来说),但还是有意想不到的行为。不是每个元素都具有不同值chats
的数组,而是SimpleMenuItem
相同的数据(即最新的)覆盖所有值,即使它(可能)应该只覆盖指定的元素。因此,在发送 5 条数据结束时,整个chats
数组最终被填充SimpleMenuItem
为 value 40
。我觉得这更像是一个 C 问题,而不是一个卵石问题——但如果有人能解决这个问题,我将不胜感激。
谢谢!