2012-04-27 49 views
0

我試圖在類之間傳遞NSDictionary。在我的AppDelegate我有實例NSDictionary。在類之間傳遞數據不起作用

@interface AppDelegate : UIResponder <UIApplicationDelegate, FBSessionDelegate, FBRequestDelegate> 
{ 
NSDictionary *contactsFromFacebook; 
} 
@property (strong, nonatomic) NSDictionary *contactsFromFacebook; 

在我的AppDelegate.m文件中,我將它合成爲@synthesize contactsFromFacebook = _contactsFromFacebook;。接下來我的步驟(填充字典):

-(void)request:(FBRequest *)request didLoad:(id)result { 
    _contactsFromFacebook = [[NSDictionary alloc]initWithDictionary:result]; 
} 

在我someClass.m文件我想從contactsFromFacebook字典使用的數據。

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSDictionary *someNewDictionary = [[NSDictionary alloc] initWithDictionary:appDelegate.contactsFromFacebook]; 

但我的someNewDictionary是空的。我做錯了什麼?

+0

您是否檢查過您是否在FBRequest委託方法中獲取數據? – iMash 2012-04-27 13:05:16

+0

由於你的財產使用_contactsFromFacebook,我建議擺脫contactsFromFacebook變量。這可能不是問題,但它是不必要的,也是潛在的混淆之源。 – 2012-04-27 13:06:33

+0

@mihirios是的。的NSLog(@ 「%@」,_ contactsFromFacebook);給我看字典。 – RomanHouse 2012-04-27 13:08:54

回答

2

在的appDelegate寫一個方法:

-(NSDictionary*)getSomething { return self.contactsFromFacebook; } 

然後在其他類:

AppDelegate *appDelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate]; 
NSDictionary *someNewDictionary = [[NSDictionary alloc] initWithDictionary:[appDelegate getSomething]]; 

這對我來說很好。

編輯: @Abizern評論我認爲可以解決您的問題。他是對的。

+1

由於您提到了命名約定:以'get'開頭的Cocoa方法可望通過重定向將結果返回到參數中。 'NSColor'的'getRed:green:blue:alpha:'。它在[可可編碼指南](http://developer.apple。com/library/ios /#documentation/Cocoa/Conceptual/CodingGuidelines/Articles/NamingMethods.html#// apple_ref/doc/uid/20001282-BCIGIJJF) – Abizern 2012-04-27 13:21:11

+0

OK,不知道。謝謝! – Kuba 2012-04-27 13:24:09

-2

「@synthesize contactsFromFacebook = _contactsFromFacebook;」

_contactsFromFacebook在哪裏?

所有我看到的是如下的聲明: -

的NSDictionary * contactsFromFacebook;

@property(強,非原子)的NSDictionary * contactsFromFacebook;

我看到了強大的性能contactsFromFacebook和可變_contactsFromFacebook之間沒有聯繫你分配在NSDictionary的指向你實例

+0

這只是一個命名約定,int不是一個真正的問題。 – Kuba 2012-04-27 13:14:55

+0

@SimpleMan這不是命名約定 - 它使用不同的名稱創建後備存儲。 – Abizern 2012-04-27 13:18:51

+0

是的,我知道@synthesize contactsFromFacebook = _somethingDifferent;是非常好的,但沒有必要在其他地方聲明這個變量。抱歉。 – Kuba 2012-04-27 13:23:36