2016-01-20 106 views
-1

我在我的代碼此實現:的NSDictionary總是[0]

@implementation vcLogin { 
    Util *_Util; 
    NSInteger _RowCount; 
    NSDictionary *_Payload; 
} 

而在其他功能我試圖填補的NSDictionary:

_Payload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil]; 

但詞典的價值總是[0]。

我已經測試此代碼,看看它是否是工作:

NSDictionary *tPayload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil]; 

而且tPayload返回2倍的值,我很期待。

我已經試過這樣:

NSDictionary *tPayload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil]; 
_Payload = [tPayload mutableCopy]; 

或者

NSDictionary *tPayload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil]; 
_Payload = tPayload; 

或者

NSDictionary *tPayload = [NSJSONSerialization JSONObjectWithData:tPayloadData options:kNilOptions error:nil]; 
[_Payload setValuesForKeysWithDictionary:tPayload]; 

我以前在一個古老的應用程序這樣做,我幾乎可以肯定,我有隻是在實現中聲明,並且字典一直爲空,直到我填充它,如果我檢查viewDidL中的值在我的老應用程序中,值爲空,但在我的新應用程序中是[0]。

我不知道我在想什麼。

感謝您的幫助。

編輯1:

我剛剛意識到,我在執行所有變量[0]當我停在viewDidLoad中的調試器。

@implementation vcLogin { 
    Util *_Util; 
    NSInteger _RowCount; 
    NSDictionary *_Payload; 
} 

舊的應用程序:

enter image description here

新的應用程序:

enter image description here

編輯2:

正如有人在commen指出我做了變量的NSLog,並充滿了信息,也許我的Xcode有問題。

我打算繼續,如果我發現Xcode的問題,我會發佈一個答案。

感謝您的幫助。

+0

嘗試初始化_Payload然後使用它! Sory,是_Payload零? –

+0

@ Mr.TI已嘗試在viewDidLoad中_Payload = N11和之前和之後的零值[0] –

+1

「而tPayload返回2倍的值,我很期待」請出示此的NSLog輸出的實際,和還記錄'_Payload'的NSLog輸出。另外請顯示更多的代碼上下文 - 實際的NSLog,你正在做的所有這些的實際代碼等等。不要嘗試從調試器中的變量窗格中讀取任何這些代碼;使用NSLog並告訴我們你得到了什麼。 – matt

回答

3

「問題」僅僅是你想看看你的變量的方法的人工製品。您正在使用「工具提示」功能。這是一個非常棘手的特徵,尤其是因爲它的工作原理變量,甚至被賦予了價值之前 - 也就是說,它顯示值,即使變量確實沒有價值着呢,它顯示的值廢話。這正是你的問題:你在viewDidLoad中暫停並使用工具提示,但這太快了:變量沒有價值。

看變量值的可靠方法是老式的穴居人調試,也就是你的變量做一個的NSLog你確信該變量的值之後。

+2

實際上,工具提示在我的「魔鬼工作的Xcode功能」清單中很高。我的建議是:不要使用它們。 – matt

-2

在使用NSDictionary之前,您需要初始化它。在Objective-C,它的工作是這樣的:

NSDictionary *dConfiguration = [NSDictionary alloc] init]; 
+2

'NSJSONSerialization JSONObjectWithData'這是否對你來說,它返回一個初始化的對象,你並不需要分配或呼叫(這將只是簡單地覆蓋你分配一個)之前,其初始化。 – jcaron