2011-06-18 15 views
5

Uzak api çağrılarımın iyi bir kısmını işlemek için Restkit'in nesne yöneticisini kullanıyorum.Restkit'te NSAsserts'leri kullanma

Çok çeşitli hatalar için NSAssert'i atar. Örneğin, sunucu iyi oluşturulmuş jsonun aksine bir hata sayfası döndürürse, kodda yanlış bir şey olmasa bile bir NSAssert oluşturur.

  1. nasıl bu NSAsserts hataları işlemek gerekir (istisnalar ve nsasserts genel kullanım ile ilgisi var bunların çoğu) Ben karıştı bir kaç şey vardır? Örneğin, birkaç kez tekrar denemek, sonra "bir şeyler ters gitti" mesajını göstermek isteriz. (uygulamayı çökmenin tersine)

  2. Hataları yakalamak için bir catch-try bloğu kullanmaya çalıştım (aşağıdaki kod), ancak hatalar yakalanmıyor. Yani benim app sadece başarısız devam ediyor. Ayrıca, yine de serbest bırakma modunda try-catch kullanarak rahat değilim. Diğer yetmezliğine

Teşekkür Yardımlarınız için çok karşıt olarak Restkit kullanım NSAsserts yapmak Sadece neden benim anlamak için

  • , - çok takdir! örneğin - anlama geldiklerini Genel olarak

    // code to catch NSAssert that sharedManager throws 
    @try{ 
        [sharedManager loadObjectsAtResourcePath:self.resourcePath delegate:self]; 
    } 
    
    @catch (NSException *ex) { 
        NSLog(@"exception caught"); 
    } 
    
    +0

    IME, insanlar (kendim de dahil olmak üzere), çünkü hata, çünkü iyi bir hata işleme çünkü kolay kullanır. Üretim kodu, bir sunucunun çöp göndermesi nedeniyle başarısız olan iddialara sahip olmamalıdır; kütüphane kodu * gerçekten * olmamalıdır. '#define NS_BLOCK_ASSERTIONS 1' deneyimini deneyebilir ve neler olduğunu görebilirsin ... –

    cevap

    3

    , sen DEĞİL şey ters gitti ki NSAssert hataları yakalamaya çalışmalısınız Bir uygulama iç durumu tutarsız hale gelir, kitaplığı yanlış kullanır vb., - ve böylece uygulamanın çıkması gerekir. [1]

    sizin hatalar yakalanmaktan değil nedeni NSAssert yükseltir, çünkü bir NSInternalInconsistencyException [2], bir dize olup NSException bir örneğidir ki. Bunları hala [3] 'e göre yakalayabilirsiniz, ör.

    Ancak yukarıda listelenen nedenlerden dolayı önerilmez.

    da 3. soruya cevap vermek için, NSAssert vb yükseltilir etrafında daha ayrıntı verin

    [1] What's the point of NSAssert, actually?

    [2] http://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Miscellaneous/Foundation_Functions/Reference/reference.html#//apple_ref/c/macro/NSAssert

    [3] http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/Exceptions/Tasks/HandlingExceptions.html