Sen precompiler avantajını yapmak ve tüm değerleri toplar bir makro, örneğin yazabilirsiniz:
#define __ThrowException(name, reason, class, function, file, line, info) [NSException exceptionWithName:name reason:[NSString stringWithFormat:@"%s:%i (%@:%s) %@", file, line, class, function, reason] userInfo:info];
#define ThrowException(name, reason, info) __ThrowException(name, reason, [self class], _cmd, __FILE__, __LINE__, info)
Ancak bu sadece çalışır eğer bir özel durum ve gelen zaman Bir ObjC işlevinin içinde (self ve _cmd
, bir ObjC işlevinde aldığınız ilk parametrelerdir; burada öz, sınıfa işaret eden bir kimlik ve _cmd
seçiciye (şu an için const!) kodlanmış olabilir) seçicidir. Yalnızca Vakfı istisnalar için bu isterseniz
Ancak, iki seçenek vardır:
) (@try() @catch blokları bir istisna ve yeni, özel atabilir
- Wrap her şey istisnai durum
- Yığın izini alın, bu, uygulamanızın tutarsız bir durumda mümkün olması ve tüm değerleri toplayamaması nedeniyle biraz daha zor olabilir. Geçerli yığın izinin toplanması, here'u ayrıntılı bir şekilde ele alır.
Bu yöntemi nereye yerleştiriyorsunuz? Uygulama temsilcisinde mi? Bu yöntem için daha önce hiçbir prototip olmadığına dair bir uyarı alıyorum .. – TommyG
@TommyG 'NSSetUncaughtExceptionHandler (& uncaughtExceptionHandler);' - (BOOL) uygulamanızın sonuna: AppDelegate uygulamasında didFinishLaunchingWithOptions: 'yöntemini ekleyin. Daha sonra yukarıdaki yöntemi AppDelegate'e de ekleyin. – alex
Bu aslında size bir yığın izini veriyor mu? – jjxtra