2011-09-15 97 views
0

我想知道如何將指向struct的指針傳遞給nsoperation的自定義init方法。它似乎期望通過一個ID類型的項目。如何將結構傳遞給NSOperation Init

這可能嗎?

typedef struct mystruct 

{ 
    int a; 
    int b; 

}mystruct; 

mystruct myitem; 


MyNSOperation *op=[[MyNSOperation alloc]initwithdata:myitem]; //can't do this, not of type id 


-(id)initwithdata:(mystruct *)thestruct 

{ 


} 

回答

1

如果你想傳遞一個結構作爲一個對象,你可以使用NSData的

NSData *data = [NSData dataWithBytes:&myitem length:sizeof(myitem)];  

[data getBytes:&myitem length:sizeof(myitem)]; 

這不是體系結構無關拿回來一個struct。

1

你的init方法應該是這樣的:

-(id)initwithdata:(mystruct)thestruct 

{ 


} 

或者你應該通過引用您的結構:

MyNSOperation *op=[[MyNSOperation alloc]initwithdata:&myitem]; 

明智的選擇。

+0

我似乎無法定義 - (id)initwithdata:(mystruct)在NSOperation子類標題中的結構。我得到一個編譯器錯誤,說「預計(在mystruct之前」 – dubbeat

+0

嘗試通過引用,然後MyNSOperation * op = [[MyNSOperation alloc] initwithdata:&myitem];' – Nekto

+0

@dubbeat - 您可以移動結構的定義到你的NSOperation子類還是一些共享的頭文件?你肯定可以使用一個自定義結構作爲初始化的參數,但是編譯器需要知道它是什麼。 –