2016-04-21 12 views
9

Mam obiekt obiektu C, który możemy nazwać ObjCObj Zaimplementowałem prostą metodę opisu, która zazwyczaj działa idealnie dobrze, jeśli wprowadzę klasę do zmiennej lokalnej.Próba wydrukowania opisu obiektu w Xcode powoduje błąd

Problem: iterację tablicę obiektów ObjCObj i umieścić je w Swift Array

let cacheArray = [ObjCObj]() 

Po moja tablica jest wypełniona, próbuję ustawić punkt przerwania, spróbuj wydrukować wartość elementu i pojawia się następujący błąd:

expression produced error: 

/var/folders/w9/3rvg1bk95379dgvcr11n16_h0000gp/T/lldb/3499/expr878.swift:1:46: error: use of undeclared type '__ObjC' 
$__lldb__DumpForDebugger(Swift.UnsafePointer<__ObjC.ObjCObj>(bitPattern: 0x67fd9b0).memory) 

Gdy próbuję wydrukować wyrażeń takich jak:

cacheArray[2] 

To działa. Ale jeśli otworzę tablicę w inspektorze debuggera i wybiorę jedną linię tablicy i poprosię o wydrukowanie opisu, to się nie powiedzie.

+0

Witam na stronie @Mikael, uruchamiam coś podobnego. Czy znalazłeś jakieś rozwiązanie/obejście tego problemu? –

+0

Na razie implementuję debugDescription w moich obiektach, aby wyświetlać potrzebne informacje. Mam również bezpośredni dostęp do właściwości obiektów w konsoli. po myarray.count lub takie rzeczy. – Mikael

Odpowiedz

3

Otrzymałem ten sam błąd zaledwie kilka minut temu i prześledziłem go do złego atrybutu właściwości w jednej z moich klas modelowych Obj-C Mantle. (Niesłusznie traktowany jako obiekt skalara.)

łamane:

@property(nonatomic, assign, readonly, nullable) AdditionalInformationStatus *additionalInformationStatus; 
        ^^^^^^ 

Naprawiono:

@property(nonatomic, copy, readonly, nullable) AdditionalInformationStatus *additionalInformationStatus; 
        ^^^^ 

To było łatwo naprawić, ale trudne do wyśledzenia.

+0

cóż, nie wiem, dlaczego powinniśmy zmienić tę właściwość, aby xcode mógł po prostu wydrukować zmienną:/ – Mikael

+1

To nie tylko uniemożliwiło mi drukowanie wartości, ale także powodowało awarię naszej aplikacji. Kiedy dodałem punkt przerwania do przesłuchania wartości, otrzymałem ten sam błąd, który otrzymałeś. Kiedy wyzerowałem ten problem, był to oczywiście błąd z naszej strony. Zamierzaliśmy zachować kopię obiektu, ale zamiast tego zrobiliśmy proste przypisanie, tak jak w przypadku delegata, co oznaczało, że liczba referencyjna obiektu nie wzrosła, co spowodowało jej zwolnienie, co spowodowało awarię ... (i niepomocny komunikat o błędzie powyżej) –

+0

Wyłączenie funkcji Addess Sanitizer najwyraźniej rozwiązuje problem. Ale nie w każdej sytuacji. – Mikael

Powiązane problemy