Tue 01 Jan 2008 09:22:37 PM UTC, comment #6:
Thank you, now I understand what your test code was for.
I had another go with the Price application and it turns out, it has nothing to do with the closing of the window. Even without closing that window, just selecting it again in the menu the applications crashes. I started to debug this and it seems that the text field pointers get corrupted. Here some debug output.
Before loading the window:
(gdb) p *self
$1 = {{isa = 0x8071380}, filterWindow = 0x0, matField11 = 0x0,
matField12 = 0x0, matField13 = 0x0, matField14 = 0x0, matField15 = 0x0,
matField21 = 0x0, matField22 = 0x0, matField23 = 0x0, matField24 = 0x0,
matField25 = 0x0, matField31 = 0x0, matField32 = 0x0, matField33 = 0x0,
matField34 = 0x0, matField35 = 0x0, matField41 = 0x0, matField42 = 0x0,
matField43 = 0x0, matField44 = 0x0, matField45 = 0x0, matField51 = 0x0,
matField52 = 0x0, matField53 = 0x0, matField54 = 0x0, matField55 = 0x0,
scaleField = 0x0, offsetField = 0x0, autoScaleCheck = 0x0,
convMatrix = {{0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0,
0, 0, 0}, {0, 0, 0, 0, 0}}, autoScale = 0 '\0', offset = 0,
scale = 0}
After loading it (note that matField12 is already wrong!):
(gdb) p *self
$2 = {{isa = 0x8071380}, filterWindow = 0x847f5e8,
matField11 = 0x907cad0, matField12 = 0x0, matField13 = 0x82f2210,
matField14 = 0x82e4250, matField15 = 0x838f8d0, matField21 = 0x83164c0,
matField22 = 0x83fb6d8, matField23 = 0x83cc300, matField24 = 0x84788b8,
matField25 = 0x9067370, matField31 = 0x8474e98, matField32 = 0x82eff98,
matField33 = 0x82ff9f8, matField34 = 0x83fc368, matField35 = 0x847ed40,
matField41 = 0x839e4e8, matField42 = 0x8318270, matField43 = 0x8401258,
matField44 = 0x8318860, matField45 = 0x83161c8, matField51 = 0x83faec8,
matField52 = 0x83fa998, matField53 = 0x83f6860, matField54 = 0x841b398,
matField55 = 0x833f118, scaleField = 0x8416de8,
offsetField = 0x842aad8, autoScaleCheck = 0x9065c18, convMatrix = {{0,
0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0,
0, 0, 0, 0}}, autoScale = 0 '\0', offset = 0, scale = 0}
(gdb) p *(self->matField11)
$2 = {{{{{isa = 0xb7f658e0}, _interface_style = NSNoInterfaceStyle,
_next_responder = 0x0, _menu = 0x0}, _frame = {origin = {x = 13,
y = 261}, size = {width = 40, height = 21}}, _bounds = {
origin = {x = 0, y = 0}, size = {width = 40, height = 21}},
_frameMatrix = 0x0, _boundsMatrix = 0x0,
_matrixToWindow = 0x82dcea8, _matrixFromWindow = 0x82ce3b8,
_super_view = 0x0, _sub_views = 0x83a9790, _window = 0x0,
_tracking_rects = 0x832a078, _cursor_rects = 0x83a1b10,
[...]
Now after opening once more from the menu:
(gdb) p *self
$5 = {{isa = 0x8071380}, filterWindow = 0x8489058,
matField11 = 0x82ce2f8, matField12 = 0x0, matField13 = 0x83b0e18,
matField14 = 0x8414e08, matField15 = 0x83fea58, matField21 = 0x926e288,
matField22 = 0x83ffca0, matField23 = 0x9270de8, matField24 = 0x8476688,
matField25 = 0x841ab88, matField31 = 0x83fa8b8, matField32 = 0x84155f0,
matField33 = 0x9263ae0, matField34 = 0x83f4060, matField35 = 0x847c828,
matField41 = 0x83a0f60, matField42 = 0x8316da8, matField43 = 0x925b148,
matField44 = 0x83b2c10, matField45 = 0x83a3ae0, matField51 = 0x8414618,
matField52 = 0x83fed80, matField53 = 0x840f8e0, matField54 = 0x83fb318,
matField55 = 0x83f9998, scaleField = 0x8333768,
offsetField = 0x82f1a58, autoScaleCheck = 0x847a0a0, convMatrix = {{0,
0, 0, 0, 0}, {0, 0, 0, 0, 0}, {0, 0, 1, 0, 0}, {0, 0, 0, 0, 0}, {0,
0, 0, 0, 0}}, autoScale = 0 '\0', offset = 0, scale = 1}
(gdb) p *(self->matField11)
$4 = {{{{{isa = 0x40c00000}, _interface_style = NSNoInterfaceStyle,
_next_responder = 0x0, _menu = 0x0}, _frame = {origin = {x = 0,
y = -1.5095211e-05}, size = {width = -6.26827951e+18,
height = 0}}, _bounds = {origin = {x = 0, y = 2.92871379e-43},
size = {width = 1.99760571e-33, height = -1.5095211e-05}},
_frameMatrix = 0xdeadface, _boundsMatrix = 0x0,
_matrixToWindow = 0x0, _matrixFromWindow = 0xb9,
_super_view = 0x925f460, _sub_views = 0xb77d4170,
_window = 0x7474726f, _tracking_rects = 0x8657079,
As you can see the isa pointer of the text field has changed and the same is true of the other text fields as well.
What I tired to do next was to load the Gorm file for the window, but there was nothing unusual, apart from the not connected second text field.
Finally I hacked in some output into the convMatrix11: method so see if the sender was the same object as the text field matField11 and it wasn't. So I would say that the Gorm file is totally corrupt and should be reproduced from scratch.
On MacOSX this problem could of course not occure as there a separate NIB file is used. Perhaps the same NIB file converted to the new format could be used in both cases to avoid this problem in the future.
|