2014-07-15 45 views
0

我有一個NSURLConnection的類別,我使用關聯的對象來擴展該類,以保留對我的自定義類的引用,以便在稍後將其他上下文委派並轉發給真正的目標。這樣我可以在某些運行時間點修改所需的數據。objc_getAssociatedObject突然開始返回零

但是,因爲一切正常工作的原因,突然間objc_getAssociatedObject返回nil,這意味着我不回我的關聯對象,整個過程停止。

我的代碼:

static void* KEY_CONNECTION_MYCLASS; 

static MyClass* GetConnectionMyClass(NSURLConnection* connection) 
{ 
    return (MyClass*) 
    objc_getAssociatedObject(connection, KEY_CONNECTION_MYCLASS); 
} 

static void AttachConnectionMyClass(NSURLConnection* connection, MyClass* myClass) 
{ 
    objc_setAssociatedObject(connection, 
         &KEY_CONNECTION_MYCLASS, 
         myClass, 
         OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
} 

和我如何獲得上述功能與其他靜態函數。

當我設置相關的對象:

NSURLConnection* connection = (NSURLConnection*) self; 
AttachConnectionMyClass(connection, myClass); 

獲取相關對象:

NSURLConnection* connection = (NSURLConnection*)self; 
MyClass* myClass = GetConnectionMyClass(connection); 
if (myClass) 
{ 
    NSLog(@"MyClass is NOT NIL"); 
} 
else 
{ 
    NSLog(@"MyClass is NIL"); 
} 

結果始終是 「MyClass的是NIL」。正如我所提到的,這是正常工作,並沒有任何理由停下來,我腦海中。

您認爲如何?

回答

2

設置和獲取對象時使用的鍵不同。

注意&設置時,但不是在獲取時。你應該在兩種情況下使用。

好的做法是定義像這樣的關鍵:

static void* KEY_CONNECTION_MYCLASS = &KEY_CONNECTION_MYCLASS; 

這樣,你的錯字就也無妨。但修復拼寫錯誤很好。

+0

該死!我甚至沒有注意到,當我重構某些東西時肯定發生了。感謝你及時的答覆。 –