2013-03-18 17 views
7

Bir NSDictionary anahtar değerini bir CGSize vermeyi deniyorum ve XCode bana bu hatayı veriyor. Benim kodum:'CGSize' türündeki koleksiyon öğesi bir Objective-C nesnesi değil

 NSArray *rows = @[ 
     @{@"size" : (CGSize){self.view.bounds.size.width, 100} 
      } 
     ]; 

Neden burada bir hata alıyorum? Bir CGSize'i bir dict'ta saklamak imkansızsa, o zaman alternatif bir yaklaşım nedir?

DÜZENLEME: şimdi alma bu kodla hata "aritmetik, işaretçi, ya da vektör türü gereklidir Kullanılmış tip 'CGSize' (aka 'struct CGSize')":

NSDictionary *row = rows[@0]; 
CGSize rowSize = [row[@"size"] CGSizeValue] ? : (CGSize){self.view.bounds.size.width, 80}; 

cevap

21

CGSize değil bir obje. Bu bir C yapısı. Bunu gibi NSValue sararak standart yoludur bir obj-c koleksiyonunda bu depolamak gerekiyorsa: geri CGSize almak gerektiğinde

NSArray *rows = @[ 
@{@"size" : [NSValue valueWithCGSize:(CGSize){self.view.bounds.size.width, 100}] 
    } 
]; 

Sonra sonra, sadece, -CGSizeValue yöntemini çağırın Örneğin

CGSize size = [rows[0][@"size"] CGSizeValue]; 
+0

Gerçekten yeni değişmez sözdizimini kullanarak objektif-c nesnesine keyfi bir C yapı koyamazsınız utanç vericidir. Görebildiğim tek gerçek zorluk, onu çıkarmak için seçmenlerle uğraşıyor. –

+0

CGSize değerini döndüren değer olarak bir bloğun atanmasına ne dersiniz? Python – zakdances

+1

@yourfriendzak bir "Lambda" gibi sırala: Bu biraz saçma görünüyor. –

0

Kevin'in yanıtı yalnızca iOS'ta çalışır; Mac OS X (Kakao) için yapın:

[NSValue valueWithSize:NSMakeSize(self.view.bounds.size.width, 100)];