2016-01-20 64 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