SORU
24 EKİM 2012, ÇARŞAMBA


'NSİnvalidArgumentException', nedeni: 'kısıtlama biçimi ayrıştırılamadı'

Ekran döndürme sırasında durur devam etmek istiyorum böyle bir küme var, NSLayoutConstraint türünü koymaya karar verdim:

'NSInvalidArgumentException', reason: 'Unable to parse constraint format: 
 self is not a key in the views dictionary. 
 H:[self.arrows]-5-|

 self.arrows = [[Arrows alloc]initWithFrame:CGRectMake(self.contentView.bounds.size.width-30, self.bounds.origin.y 4, 30, self.contentView.bounds.size.height-4)];

 NSDictionary *viewsDictionary = NSDictionaryOfVariableBindings(self.arrows, self.contentView);
 NSMutableArray * constraint=[[NSMutableArray alloc]init];
 [constraint addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:  [self.arrows]-5-|" options:0 metrics:nil views:viewsDictionary]];
 [constraint addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-1-[self.arrows]" options:0 metrics:nil views:viewsDictionary]];
 [constraint addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"[V: [self.arrows]-1-|" options:0 metrics:nil views:viewsDictionary]];
 [self.arrows addConstraints:constraint];

CEVAP
24 EKİM 2012, ÇARŞAMBA


Otomatik düzen visual Biçim ayrıştırma motoru "." VFL böyle bir anahtar yerine bir ana yol olmak kısıtlaması valueForKeyPath: kullanıyor. bu çok normaldir bu gibi görünüyor

NSDictionaryOfVariableBindings(...) parametre parantez içinde alın ve değeri olarak nesne (senin durumunda: @{"self.arrow" : self.arrow}) ile değişmez bir anahtarı çevirmek. VFL durumunda, otomatik düzen arrow anahtarı olan bir subdictionary (veya) sınıfın bir anahtar görünümü sözlüğü self adında var olduğunu düşünüyorum

@{
   @"self" : @{ @"arrow" : self.arrow }
}

kelimenin tam anlamıyla sistem anahtar olarak yorumlamak istediğinde "self.arrow".

Bu gibi örnek değişkenleri bir alıcı kullanıyorum genelde, ben genellikle benim kendi sözlüğünü oluşturma gibi NSDictionaryOfVariableBindings(...) kullanmak yerine sonunda:

NSDictionary *views = @{ @"arrowView" : self.arrow }

ya

NSDictionary *views = NSDictionaryOfVariableBindings(_arrow);

Sen kendi kendine olmadan VFL görünümü kullanmak için izin verecek ve size neden bahsettiğini hala biliyorum:

NSArray *arrowHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[arrowView]-5-|" options:0 metrics:nil views];

ya

NSArray *arrowHorizConstraints = [NSLayoutConstraint constraintsWithVisualFormat:@"H:[_arrow]-5-|" options:0 metrics:nil views];

Genel bir kural olarak, onları herhangi bir sistem karışıklık ya da hata ayıklama kabuslar önlemek için sözlük bir nokta (.) tuşları var olmadığını öğrendim.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Canceriansoul

    Canceriansou

    15 Ocak 2011
  • hidetake takayama

    hidetake tak

    3 Mart 2009
  • mist64

    mist64

    30 Mayıs 2006