2012-05-24 49 views
3

我使用塊和繼承有一些極端困難。objective-c錯誤:[UIView copyWithZone:]:無法識別的選擇器發送到實例

我宣佈的.h文件塊:

- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil 
{ 
    self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; 
    if (self) { 
     block = ^(BOOL noshow) 
     { 
      if(noshow){ 
       AutoTracView.hidden = YES; 
       MarineTracView.hidden = YES; 

      } 
     }; 
    } 
    return self; 
} 

現在我把它以及UIView的情況下傳遞給UIViewController中的一個類別:

void (^block)(BOOL); 

在.M初始化

在UIViewController + extensions.m:

-(void)renderView:(int)value onCollection:(NSDictionary *)collection withBlock:block 
{ 
    block(TRUE); 
    NSString *index = [NSString stringWithFormat:@"%d", value]; 
    UIView *view = [collection objectForKey:index]; 
    view.hidden = NO;  
} 

不幸的是,塊(TRUE)拋出一個編譯錯誤:「調用的對象類型ID不是一個函數或函數指針」

好了,所以我得到絕望,只是試圖讓該塊的東西工作,所以我將該塊作爲參數調用刪除。並在可以工作的控制器內調用它。但隨後出現了另一個問題:

NSDictionary *const collection = [NSDictionary dictionaryWithObjectsAndKeys: //make global 
            @"1", AutoTracView, 
            @"2", MarineTracView, 
            nil]; 

它無法與上面說:

-[UIView copyWithZone:]: unrecognized selector sent to instance 0x6ee2b80 
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[UIView copyWithZone:]: unrecognized selector sent to instance 0x6ee2b80' 

不允許我周圍通過我的UIView實例?

以下是一個頭文件:

@property (weak, nonatomic) IBOutlet UIView *AutoTracView; 

@property (weak, nonatomic) IBOutlet UIView *MarineTracView; 

林感覺,在做任何事情,現在被困。這可能看起來像是一個兩部分的問題,但我真的放棄了傳遞塊的概念,只是尋找錯誤的想法「[UIView copyWithZone:]:無法識別的選擇器發送到實例」

回答

3

的一個問題是你dictionaryWithObjectsAndKeys:電話。我認爲你想讓UIViews成爲對象,而數字串就是關鍵,但是你編寫它的方式,你將字符串作爲值,UIViews成爲關鍵。 UIView沒有實現NSCopyable,所以它們不能用作關鍵字。你應該顛倒順序在您的呼叫,像這樣:

NSDictionary *const collection = [NSDictionary dictionaryWithObjectsAndKeys: //make global 
            AutoTracView, @"1", 
            MarineTracView, @"2", 
            nil]; 

真的,如果你想要做的就是給他們的數字指標,你可以使用一個NSArray而不是一個NSDictionary的,但沒有理由它贏得」無論哪種方式工作。

0

那麼方法定義呢?是是這樣的:

-(void)renderView:(int)value onCollection:(NSDictionary *)collection withBlock:(void(^)(BOOL))block; 

也許你不定義方法的類以正確的方式

希望這有助於

0

複製了字典的密鑰,並且您的代碼嘗試使用UIView的實例作爲密鑰。我懷疑你的論點順序錯誤,並且打算使用字符串作爲鍵。使用可變參數列表初始化字典時,值首先出現。

相關問題