'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
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.
Alternatif bir çıkış numarasını biçimi...
Böyle büyük mükafat Film Şeridi uyarı:...
Erişim kısıtlama: ..\jre\lib\rt.jar ge...
Sayı biçimi için her zaman 2 ondalık b...
Ne kadar iyi hiper bir biçimi JMSSeria...