Kısıtlamaları aynı anda karşılayamaz, kısıtlamayı kaldırarak kurtarmaya çalışır.


147

Hata ayıklama alanında aldığım hata mesajı aşağıdadır. İyi çalışıyor ve bu hatayı almam dışında hiçbir şey yanlış değil. Bu, elmanın uygulamayı kabul etmesini engeller mi? Nasıl düzeltirim?

2012-07-26 01:58:18.621 Rolo[33597:11303] Unable to simultaneously satisfy constraints.
    Probably at least one of the constraints in the following list is one you don't want. Try this: (1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x887d630 h=--& v=--& V:[UIButtonLabel:0x886ed80(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887d5f0 h=--& v=--& UIButtonLabel:0x886ed80.midY == + 37.5>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b4b0 h=--& v=--& V:[UIButtonLabel:0x72bb9b0(19)]>",
    "<NSAutoresizingMaskLayoutConstraint:0x887b470 h=--& v=--& UIButtonLabel:0x72bb9b0.midY == - 0.5>",
    "<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>",
    "<NSLayoutConstraint:0x72c2430 UILabel:0x72bfad0.top == UILabel:0x72bf7c0.top>",
    "<NSLayoutConstraint:0x72c2370 UILabel:0x72c0270.top == UILabel:0x72bfad0.top>",
    "<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>",
    "<NSLayoutConstraint:0x72c15b0 V:[UILabel:0x72c0270]-(NSSpace(8))-[UIRoundedRectButton:0x72bbc10]>",
    "<NSLayoutConstraint:0x72c1570 UIRoundedRectButton:0x72bbc10.baseline == UIRoundedRectButton:0x7571170.baseline>",
    "<NSLayoutConstraint:0x72c21f0 UIRoundedRectButton:0x7571170.top == UIButton:0x886efe0.top>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]>

Break on objc_exception_throw to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.

1
Bu hata yalnızca Xcode
4.5'te

Öyleyse yanlış bir şey yok mu? Uygulama mağazasına gönderebilmek için başka bir xcode sürümü kullanmak mümkün olabilir mi?
Johnny Cox

1
Evet, yanlış bir şeyler var, ancak alakasız çünkü halka açık Xcode sürümlerinde henüz mevcut olmayan bir iOS özelliği ile ilgisi var. 4.4 ile derliyorsa, bu sürümü kullanarak yayınlayabilirsiniz (bugün piyasaya sürülmüştür).
borrrden

Xcode 4.4'te OS X uygulamaları için bu hata mesajını alıyorum. Ben anlamıyorum
Steve McLeod

@ Bartłomiej Semańczyk Şans eseri odaya katılabilir misiniz: chat.stackoverflow.com/rooms/92522/autolayout-and-ios ? Maalesef rastgele, ancak otomatik düzen ile ilgili bir konuda tavsiyenizi takdir ediyorum, teşekkürler!
cheznead

Yanıtlar:


282

Hata ayıklamanızı ve hangi kısıtlamanın "istemediğinizi" bulmanızı öneririm . Aşağıdaki sorununuz olduğunu varsayalım:

görüntü açıklamasını buraya girin

Her zaman sorun, aşağıdaki Kısıtlamaları ve Görünümleri nasıl bulacağınızdır.

Bunun nasıl yapılacağına dair iki çözüm var:

  1. DEBUG VIEW HIERARCHY (Bu yolu önermeyin)

Beklenmeyen kısıtlamaları (PBOUserWorkDayHeaderView) nerede bulacağınızı bildiğiniz için, bunu oldukça iyi yapmanın bir yolu vardır. Bulalım UIViewve NSLayoutConstraintkırmızı dikdörtgenler halinde. Hafızadaki kimliklerini bildiğimiz için oldukça kolaydır.

  • Debug View Hierarchy kullanarak uygulamayı durdurun :

görüntü açıklamasını buraya girin

  • Uygun UIView'ı bulun:

görüntü açıklamasını buraya girin

  • Sonraki, önemsediğimiz NSLayoutConstraint'i bulmak:

görüntü açıklamasını buraya girin

Gördüğünüz gibi, hafıza işaretçileri aynı. Yani şimdi neler olduğunu biliyoruz. Ek olarak NSLayoutConstraint, görünüm hiyerarşisinde bulabilirsiniz . View'da seçildiği için Navigator'da da seçilmiştir.

görüntü açıklamasını buraya girin

İhtiyacınız olursa, adres işaretçisini kullanarak konsolda da yazdırabilirsiniz:

(lldb) po 0x17dce920
<UIView: 0x17dce920; frame = (10 30; 300 24.5); autoresize = RM+BM; layer = <CALayer: 0x17dce9b0>>

Aynısını, hata ayıklayıcının size göstereceği her kısıtlama için yapabilirsiniz :-) Şimdi bununla ne yapacağınıza siz karar verin.

  1. DAHA İYİ YAZDIR (Bu şekilde gerçekten tavsiye ederim, bu Xcode 7)

    • görünümünüzdeki her kısıtlama için benzersiz bir tanımlayıcı ayarlayın:

görüntü açıklamasını buraya girin

  • şunun için basit uzantı oluşturun NSLayoutConstraint:

SWIFT :

extension NSLayoutConstraint {

    override public var description: String {
        let id = identifier ?? ""
        return "id: \(id), constant: \(constant)" //you may print whatever you want here
    }
}

HEDEF-C

@interface NSLayoutConstraint (Description)

@end

@implementation NSLayoutConstraint (Description)

-(NSString *)description {
    return [NSString stringWithFormat:@"id: %@, constant: %f", self.identifier, self.constant];
}

@end
  • bir kez daha oluşturun ve şimdi sizin için daha fazla okunabilir çıktı elde edin:

görüntü açıklamasını buraya girin

  • Bulunduğunuzda id, Find Navigator'da basitçe dokunabilirsiniz :

görüntü açıklamasını buraya girin

  • ve hızlıca bulun:

görüntü açıklamasını buraya girin

BU DURUMU NASIL DÜZELTECEK?

  • değiştirmeyi deneyin öncelik için 999kırık kısıtı için.

Bu sadece hatamı düzeltti ... çok teşekkürler. Bunu c hedefi için nasıl yaparsınız? Bir kategori eklensin mi?
cheznead

Çözüm için Thx, ancak c hedefinde uzantı kullanabilir miyim?
dev.nikolaz

Bu tanımlayıcı, programlı olarak UIViews'ta bulunan accessibilityIdentifier ile aynı mı? Değilse, tanımlayıcı programlı olarak nasıl ayarlanabilir?
Arunabh Das

@Das hayır, aynı değil. Bu yanıtı
Bartłomiej Semańczyk

3
İkinci yolu seviyorum ve bence bu, bozuk kısıtlamanın izini
sürmenin

108

Yaşadığınız sorun, NSAutoresizingMaskLayoutConstraints'in orada olmaması gerektiğidir. Bu eski yay ve payandalar sistemidir. Ondan kurtulmak için, sınırlamak istediğiniz her görünümde bu yöntemi çalıştırın:

[view setTranslatesAutoresizingMaskIntoConstraints:NO];

5
setTranslatesAutoresizingMaskIntoConstraints'i NO olarak ayarlarken bir görünümün hiç görünmemesinin bazı nedenleri nelerdir?
topwik

1
örnek olarak, bir SSBadgeView (UIView) oluşturuyorum, SSBadgeView'a bir imageView alt Görünümü ekliyorum, ardından SSBAdgeView'ı bir UIReuseableView'a bir alt görünüm olarak ekliyorum. SSBadgeView ve setTranslatesAutoresizingMaskIntoConstraints'e bazı kısıtlamalar ekliyorum: SSBadgeView'da NO. SSBadgeView'ın görüntü alt Görünümü beklendiği gibi düzenlenmiştir, ancak görüntünün SSBadgeView üst öğesi görünecek bir yerde değildir.
topwik

1
Alt alt görünümlerinizde TranslatesAutoresizingMaskIntoConstraints'i devre dışı bırakmayı unuttunuz
Softlion

Bu özelliği ayarladığımda olan budur, drive.google.com/file/d/0BxuYs8WHXCF7bV9ndHFrQ0dMYVE/… Şu kod satırını kullanıyorum: [self.contentView setTranslatesAutoresizingMaskIntoConstraints: NO]; for (self.contentView.subviews içinde UIView * görünümü) {[setTranslatesAutoresizingMaskIntoConstraints'i görüntüle: HAYIR]; } Daha önce şuna benziyordu: drive.google.com/file/d/0BxuYs8WHXCF7OWlvZGQwN3FlbzQ/… Yine de işe yaradı, söylemeliyim.
rptwsthi

28

Aynı yönde ve türde birden fazla sınırlama kullanmamaya dikkat edin .

Örneğin: Sondaki dikey kısıtlama = 15 ve diğeri> = 10.

Bazen Xcode, fark etmediğiniz bazı kısıtlamalar yaratır . Sen zorunda gereksiz kısıtlamalar kurtulmak ve günlük uyarı mutlaka yok olacaktır.

görüntü açıklamasını buraya girin

Ayrıca, bazı belirli nedenleri doğrudan günlükten okuyabilir ve tespit edebilirsiniz :

NSLayoutConstraint: 0xa338390 V: | - (15) - [UILabel: 0xa331260] (Adlar: '|': UILabel: 0xa330270)>

Bunu UILabel kısıtlamasında bir problem olarak okuyabiliriz, dikey kısıtın 15pt uzunluğunda olmasına yol açar.

NSLayoutConstraint: 0x859ab20 H :-( 13) - | [UIView: 0x85a8fb0] ...

Bu, sondaki yatay kısıtlama vb. Olacaktır.


6

Bu istisnalardan epeyce sayıda atıldım, bunları çözmenin en hızlı ve en kolay yolu, daha sonra hikaye panosu kaynak kodunda aradığım istisnalarda benzersiz değerler bulmaktı. Bu, soruna neden olan gerçek görünümleri ve kısıtlamaları bulmama yardımcı oldu (tüm görünümlerde anlamlı kullanıcı etiketleri kullanıyorum, bu da kısıtlamaları ve görünümleri izlemeyi çok daha kolay hale getiriyor) ...

Bu nedenle, yukarıdaki istisnaları kullanarak film şeridini xcode'da (veya başka bir düzenleyicide) "kaynak kodu" olarak açar ve bulabileceğim bir şey arardım ...

<NSLayoutConstraint:0x72bf860 V:[UILabel:0x72bf7c0(17)]> 

.. bu, (17) değerine sahip bir UILabel üzerinde dikey (V) kısıtına benziyor.

Ayrıca bulduğum istisnalara bakıyorum

<NSLayoutConstraint:0x72c22b0 V:[UILabel:0x72bf7c0]-(NSSpace(8))-[UIButton:0x886efe0]>

UILabel (0x72bf7c0) bazı dikey aralıklarla (8) bir UIB düğmesine (0x886efe0) yakın görünüyor ..

Bu, film şeridi kaynak kodundaki (muhtemelen metni başlangıçta "17" olarak arayarak) veya en azından birkaç olası adayı arayarak belirli görünümleri bulmam için yeterli olacaktır. Oradan bunların film şeridinde hangi görünümler olduğunu gerçekten anlayabilmeliyim ve bu da sorunu tanımlamayı çok daha kolay hale getirecek (boyut kısıtlamalarıyla çakışan "çoğaltılmış" sabitlemeyi veya sabitlemeyi arayın).


"Anlamlı userLabels kullanıyorum" - bu bağlamda userLabels nedir? (nasıl ayarlayacağınız gibi)
Stripes

Kimlik denetçisinin Belge bölümünde, hikaye panosu kaynak kodunda "userLabel" değerine çevrilen bir "Etiket" alanı vardır.
CBJ

Bunları ayrıca sol taraftaki "Genel Bakış" panelinde seçili bir görünüme tıklayarak da ayarlayabilirsiniz (bulucudaki bir dosyayı yeniden adlandırmaya benzer)
CBJ

1
Muhtemelen, korkunç "Aynı anda kısıtlamaları karşılayamıyorum" sorusunu çözme konusunda okuduğum en iyi şey. Ağrı. Bu noktada gösterilen nesnenin genellikle suçlu olan "<NSLayoutConstraint: kısıtlamasını kırarak kurtarmaya çalışacak" olduğunu ve C James'in dediği gibi, muhtemelen sabitleme kısıtlamalarıyla çelişen bir yükseklik veya genişlik kısıtlaması olduğunu buldum. Yüksekliği kaldırmakta zorlandım, ancak kısıtlamalar doğru olduğundan, yükseklik diğer kısıtlamalardan toplanabiliyordu. Yükseklik sınırlaması eklemek Auto Layout'u karıştırdı, bu yüzden şimdi aradığım şey bu.
latenitecoder

6

Bu hataya hangi kısıtlamaların neden olduğunu anlamakta zorlandım. İşte bunu yapmanın daha basit bir yolu.

Xcode 6.1.1 kullanıyorum

  1. Tüm UIL etiketlerini, UIGörsellerini vb. Seçmek için "Command + A"
  2. Denetlemek için Düzenleyici -> Sabitle> (Seç ...) öğesine tıklayın
  3. tekrar Düzenleyici -> Otomatik Düzen Sorunlarını Çöz -> Eksik Kısıtlamaları Ekle veya Önerilen Kısıtlamalara Sıfırla'yı tıklayın. Durumunuza bağlıdır.

5

Bu sorunu yaşadım çünkü .xibdosyalarım otomatik düzen kullanıyordu.

Dosya denetçisinde ilk sekme. "Otomatik Düzen Kullan" seçeneğinin işaretini kaldırmak sorunu çözdü.

otomatik düzen dosya denetçisi


Bunu yaptım ve sorunu çözdüm, ancak ekranın üst kısmındaki (gezinme çubuğu olarak kullandığım) bir 'UIImageView' ekranın alt kısmına taşındı. Bunun neden olduğunu biliyor musun?
dietbacon

1
Otomatik düzen, nesnelerin düzenini yönetmek için kısıtlamalar kullanır . Otomatik düzeni devre dışı bıraktığınız için, bu kısıtlamalar büyük olasılıkla ortadan kayboldu ve bu nedenle konumunuzun konumu UIImageViewdeğişti. Bu konumu programlı olarak veya Arabirim Oluşturucu aracılığıyla yeniden ayarlamalısınız.
Stéphane Bruckert

5

İşte benim deneyimim ve Çözümüm. Koda dokunmadım

  1. Görünümü seçin (UILabel, UIImage vb.)
  2. Düzenleyici> Sabitle> (Seç ...) Denetime
  3. Düzenleyici> Otomatik Yerleşim Sorunlarını Çöz> Eksik Kısıtlamaları Ekle

4

bu kodu hızlı kullan

view.translatesAutoresizingMaskIntoConstraints = false

1
Bu, hedef-c etiketli bir soru için hızlı bir cevaptır.
Tobi Nary

2
@SmokeDispenser Neyse, bunun hızlı bir kod olduğundan bahsetmiştim. ve benim için çalıştı. hızlı / hedef ortak kakao dokunmatik SDK'sına sahiptir.
Arun Kumar P

2

Her arama sorgusundan SO sorularını ve yanıtlarını takip ettim. Ama hepsi belirli biriyle ilgilidir.

Temelde, bir format yazmadan önce (basit olabilir), size bir uyarı verecektir.

İOS 8.0'dan varsayılan olarak görünümler boyut sınıflarıdır. Boyut sınıflarını devre dışı bıraksanız bile bazı otomatik düzen kısıtlamaları içerecektir.

Bu nedenle, VFL kullanarak kod aracılığıyla kısıtlamaları ayarlamayı planlıyorsanız. O zaman aşağıdaki satırlardan birine dikkat etmelisiniz.

// Remove constraints if any.
[self.view removeConstraints:self.view.constraints];

SO'da çok araştırma yaptım, ancak çözüm Apple Örnek Kodunda yatıyordu .

Bu nedenle, yenisini eklemeyi planlamadan önce varsayılan kısıtlamaları kaldırmanız gerekir.


1

Benim için bu sorunun ana nedeni AutoLayout, Xibeditörde işareti kaldırmayı unutmuş olmamdı . Aslında, XIBkod içi birçok ayar yaptım .


1
 for(UIView *view in [self.view subviews]) {
    [view setTranslatesAutoresizingMaskIntoConstraints:NO];
}

Bu, soruna neden olan görüşü yakalamama yardımcı oldu.


1

Yukarıdaki cevapların hiçbiri benim durumuma yardımcı olmuyor. XCode 10.1 çalıştırıyorum ve uygulamamı simülatörde bir "iPad (5. nesil)" için test ediyorum. Simülatör, iOS 12.1 kullanıyor.

Film şeridimde iki UITextField alt görünümüyle basit bir kök görünümüm var. Film şeridinde kullanılan hiçbir kısıtlama yoktur. Ve uygulamada veya film şeridinde UIButtonBarView nesnem yok.

Uygulama başlatıldığında ve kök görünümünü yerleştirdiğinde hiçbir mesaj yazdırılmaz. Simüle edilen cihaz döndürüldüğünde yok.

Ancak simülatörde, metin alanlarından birine tıkladığım anda, simülatörde hiç görünmeyen tam klavye olmasa da klavye uzantısı ekranın altından çıkıyor. Ancak terminalde aşağıdakiler yazdırılır:

Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. 
Try this: 
    (1) look at each constraint and try to figure out which you don't expect; 
    (2) find the code that added the unwanted constraint or constraints and fix it. 
(Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints) 
(
"<NSAutoresizingMaskLayoutConstraint:0x6000034e7700 h=--& v=--& UIKeyboardAssistantBar:0x7f9c7d714af0.height == 0   (active)>",
"<NSLayoutConstraint:0x6000034aba20 V:|-(0)-[_UIUCBKBSelectionBackground:0x7f9c7d51ec70]   (active, names: '|':_UIButtonBarButton:0x7f9c7d51de40 )>",
"<NSLayoutConstraint:0x6000034aba70 _UIUCBKBSelectionBackground:0x7f9c7d51ec70.bottom == _UIButtonBarButton:0x7f9c7d51de40.bottom   (active)>",
"<NSLayoutConstraint:0x6000034fb3e0 V:|-(0)-[_UIButtonBarStackView:0x7f9c7d715880]   (active, names: '|':UIKeyboardAssistantBar:0x7f9c7d714af0 )>",
"<NSLayoutConstraint:0x6000034fb750 V:[_UIButtonBarStackView:0x7f9c7d715880]-(0)-|   (active, names: '|':UIKeyboardAssistantBar:0x7f9c7d714af0 )>",
"<NSLayoutConstraint:0x6000034abc00 'UIButtonBar.maximumAlignmentSize' _UIButtonBarButton:0x7f9c7d51de40.height == UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide'.height   (active)>",
"<NSLayoutConstraint:0x6000034d7cf0 'UIView-bottomMargin-guide-constraint' V:[UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide']-(9)-|   (active, names: '|':_UIButtonBarStackView:0x7f9c7d715880 )>",
"<NSLayoutConstraint:0x6000034d7c50 'UIView-topMargin-guide-constraint' V:|-(10)-[UILayoutGuide:0x600002ef4e00'UIViewLayoutMarginsGuide']   (active, names: '|':_UIButtonBarStackView:0x7f9c7d715880 )>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000034aba70 _UIUCBKBSelectionBackground:0x7f9c7d51ec70.bottom == _UIButtonBarButton:0x7f9c7d51de40.bottom   (active)>

Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

Bana öyle geliyor ki, tüm bunların uygulamamdaki hiçbir şeyle ve Apple'ın kendi klavye görünümünü nasıl oluşturduğuyla ilgisi var, küçük uzantımla birleştirilecek olsa bile.

Öyleyse soru hala kalıyor, bir uygulama geliştiricisi olarak yapmaktan sorumlu olduğum bir şey var mı (varsayıma göre bu, ilgilenmeye değer bir sürü şey) veya bu sadece Apple'ın kendi sorunu / hatası mı?

FWIW, bu kısıtlama sorunu mesajı, iPad Pro 12.9 inç (3. nesil) gibi daha yeni bir iPad modelini simüle ederken oluşmaz. Ancak iPad Pro 9.7 inç simüle edilirken mesaj görünüyor. Hepsi iOS 12.1 çalıştırdıklarını iddia ediyor.


1

Aynı hatayı alıyorum, ancak yalnızca belirli bir görünümde, ilk metin alanına ve ardından bir sonraki metin alanına dokunduğumda.

İOS 13.4 için SwiftUI ile yazıyorum

 Unable to simultaneously satisfy constraints.
        Probably at least one of the constraints in the following list is one you don't want. 
        Try this: 
            (1) look at each constraint and try to figure out which you don't expect; 
            (2) find the code that added the unwanted constraint or constraints and fix it. 
    (
        "<NSLayoutConstraint:0x2809b6760 'assistantHeight' TUISystemInputAssistantView:0x105710da0.height == 44   (active)>",
        "<NSLayoutConstraint:0x2809ccff0 'assistantView.bottom' TUISystemInputAssistantView:0x105710da0.bottom == _UIKBCompatInputView:0x10525ae10.top   (active)>",
        "<NSLayoutConstraint:0x2809cccd0 'assistantView.top' V:|-(0)-[TUISystemInputAssistantView:0x105710da0]   (active, names: '|':UIInputSetHostView:0x105215010 )>",
        "<NSLayoutConstraint:0x2809ca300 'inputView.top' V:|-(0)-[_UIKBCompatInputView:0x10525ae10]   (active, names: '|':UIInputSetHostView:0x105215010 )>"
    )

    Will attempt to recover by breaking constraint 
    <NSLayoutConstraint:0x2809ccff0 'assistantView.bottom' TUISystemInputAssistantView:0x105710da0.bottom == _UIKBCompatInputView:0x10525ae10.top   (active)>

    Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
    The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKitCore/UIView.h> may also be helpful.

0

Dikkat edilmesi gereken bir şey (en azından bu beni şaşırttı) kısıtlamayı yanlış görüşten kaldırıyor olmamdı. Kaldırmaya çalıştığım kısıtlama benim görüşümün çocuk kısıtlaması değildi, bu yüzden bunu yaptığımda

myView.removeConstraint(theConstraint)

aslında hiçbir şey kaldırmıyordu çünkü aramam gerekiyordu

myView.superView.removeConstraint(theConstraint)

çünkü kısıtlama teknik olarak benim görüşümün kardeş kısıtlamasıydı.


0

Aynı zamanda xib'de bir viewCircle için günlükteki kısıtlamaları kırma sorununu da alıyordum. Neredeyse yukarıda listelenen her şeyi denedim ve hiçbir şey benim için çalışmıyordu. Daha sonra, günlükte kırılan Yükseklik sınırlamasının önceliğini değiştirmeye çalıştım (xib üzerindeki kısıtlamalar için bir tanımlayıcı ekleyerek onaylandı) buraya görüntü açıklamasını girin


-4

hızlı 4

Bu satırı viewDidLoad'a ekliyorum ve benimle iyi çalışıyorum.

view.removeConstraints(view.constraints)
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.