Bir menü katmanında haber içeriğini görüntüleyen orijinal çakıl için kişisel bir haber kaynağı uygulaması tasarlıyorum. Bir yükleme görüntüsü görüntüleyen ve telefondaki js ile saatim uygulaması arasındaki veri aktarımını işleyen bir pencere içeren iki C dosyası var. Veriler, dosyalar arasında paylaşılan, ancak aşağıda gösterdiğim örnekte alakasız olan bazı extern değişkenlerine kaydedilir (tüm bunların iyi çalıştığına inanıyorum). Belirli koşullar karşılandığındaÇakıl Menüsü Katman Kazası
Ben bir işlev içinde benim ana .c dosyasında news_list_window_init()
arıyorum. Şu anda sadece menümüzün kabul edilebilir olduğunu test etmek için kaydırılabilir bir menü içeren bir pencere görüntülemeye çalışıyorum. Kullanmakta olduğum sorun, kaydırmaya çalıştığımda uygulamamın çökmesidir. Ben sadece bu kod ile yeni bir proje oluşturun nerede, aşağıda bağımsız benim .c dosyasını test ettik
ault_handling.c:78> App fault! {f5ec8c0d-9f21-471a-9a5c-c83320f7477d} PC: 0x800fd5b LR: ???
Program Counter (PC) : 0x800fd5b ???
Link Register (LR) : ??? ???
, açıklama: pencere tüm menü öğeleri var ama ben kaydırırken uygulaması ile mevcut görünür ilgili olmayan news_list.h
ve externs.h
başlık dosyaları ve dosyanın altındaki ana işlevde yorum yapın. Bu iyi çalışıyor, menü kaydırıyor ve çökme yok ve her şey iyi görünüyor.
Sorunun ana dosyamda nasıl göründüğünü göremiyorum, çünkü bu dosyada yer alan tek işlev news_list_window_init()
olduğundan, menü gerçekten doğru şekilde görüntüleniyor. Uygulamayı geri düğmesiyle bile düzgün bir şekilde kapatabilirim. Ancak kaydırmaya çalışmak, uygulamayı kilitler. Bu hatayı neden olabileceğine dair bir kayıp yaşıyorum. Herhangi bir öneri var mı? Teşekkürler!
Bu, ilgili .c dosyasıdır:
// news_list.c
#include "pebble.h"
#include "news_list.h"
#include "externs.h"
#define NUM_MENU_SECTIONS 1
static Window *news_list_window;
static MenuLayer *menu_layer;
static uint16_t menu_get_num_sections_callback(MenuLayer *menu_layer, void *data) {
return NUM_MENU_SECTIONS;
}
static uint16_t menu_get_num_rows_callback(MenuLayer *menu_layer, uint16_t section_index, void *data) {
return str_count; // Variable story count
}
static int16_t menu_get_header_height_callback(MenuLayer *menu_layer, uint16_t section_index, void *data) {
return MENU_CELL_BASIC_HEADER_HEIGHT;
}
static void menu_draw_header_callback(GContext* ctx, const Layer *cell_layer, uint16_t section_index, void *data) {
menu_cell_basic_header_draw(ctx, cell_layer, "Header");
}
static void menu_draw_row_callback(GContext* ctx, const Layer *cell_layer, MenuIndex *cell_index, void *data) {
menu_cell_basic_draw(ctx, cell_layer, "Menu Item", NULL, NULL);
}
static void menu_select_callback(MenuLayer *menu_layer, MenuIndex *cell_index, void *data) {
// Currently Empty
}
int16_t menu_get_cell_height_callback(struct MenuLayer *menu_layer, MenuIndex *cell_index, void *callback_context)
{
return 40;
}
static void news_list_window_load(Window *window) {
// Now we prepare to initialize the menu layer
Layer *window_layer = window_get_root_layer(window);
GRect bounds = layer_get_frame(window_layer);
// Create the menu layer
menu_layer = menu_layer_create(bounds);
menu_layer_set_callbacks(menu_layer, NULL, (MenuLayerCallbacks){
.get_num_sections = menu_get_num_sections_callback,
.get_num_rows = menu_get_num_rows_callback,
.get_header_height = menu_get_header_height_callback,
.draw_header = menu_draw_header_callback,
.draw_row = menu_draw_row_callback,
.select_click = menu_select_callback,
.get_cell_height = menu_get_cell_height_callback,
});
// Bind the menu layer's click config provider to the window for interactivity
menu_layer_set_click_config_onto_window(menu_layer, window);
layer_add_child(window_layer, menu_layer_get_layer(menu_layer));
}
static void news_list_window_unload(Window *window) {
// Destroy the menu layer
menu_layer_destroy(menu_layer);
}
void news_list_window_init() {
news_list_window = window_create();
window_set_window_handlers(news_list_window, (WindowHandlers) {
.load = news_list_window_load,
.unload = news_list_window_unload,
});
window_stack_push(news_list_window, true);
}
void news_list_window_deinit() {
window_destroy(news_list_window);
}
// int main(void) {
// news_list_window_init();
// app_event_loop();
// news_list_window_deinit();
// }
Bu alakalı .h dosyasıdır: Ben bellek gerçekten çok düşük çalıştırıyorum bu ne zaman yaşadım
// news_list.h
#ifndef NEWS_LIST_H
#define NEWS_LIST_H
// Public Function list
void news_list_window_init(void);
void news_list_window_deinit(void);
#endif
bir göz atın böylece şeyin belki github tam kod sonrası başarısız olursa Kesinlikle bellek konu oldu. Benim javascript uygulamasından büyük bir veri dizisini saatim uygulamasına göndermeye çalışıyordum, bu yüzden tüm belleğimi yediğim çok büyük bir arabelleğe 'app_message_open' adını verdim. Yardımın için teşekkürler. –