Чтобы приложение хранило последние несколько идентификаторов PID в массиве по умолчанию пользователя, я написал следующий метод updateLastPids. Во-первых, убедитесь, что делать, скажем,
#define kMaxNumberOfPids 5 //should be integer greater than zero!
#define ENLastPidsUserDefault @"ENLastPidsUserDefault";
Кстати, я использую 5, потому что я собираюсь позволить приложению отправить мне журналы за последние 5 прогонов, только в случае аварии был результат чего-то запутался даже раньше, чем на последнем прогоне; вы можете изменить 5 к 1, если хотите.
- (void)updateLastPids
{
NSInteger currentPid = [[NSProcessInfo processInfo] processIdentifier];
NSNumber *currentPidNumber = [NSNumber numberWithInt:currentPid];
NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];
NSMutableArray *lastPidsArray = [[userDefaults arrayForKey:ENLastPidsUserDefault]
mutableCopy];
if (!lastPidsArray)
{
NSArray *newLastPidsArray = [NSArray arrayWithObject:currentPidNumber];
[userDefaults setObject:newLastPidsArray forKey:ENLastPidsUserDefault];
}
else
{
if ([lastPidsArray count] == kMaxNumberOfPids)
{
[lastPidsArray removeObjectAtIndex:0]; //get rid of the oldest PID
[lastPidsArray addObject:currentPidNumber];
NSAssert([lastPidsArray count] == kMaxNumberOfPids, @"invalid count");
}
//In case I decrease kMaxNumberOfPids later on. (Or some PITA user added
//stuff into the array by himself or herself!)
else if ([lastPidsArray count] > kMaxNumberOfPids)
{
[lastPidsArray removeObjectAtIndex:0];
while ([lastPidsArray count] >= kMaxNumberOfPids)
[lastPidsArray removeLastObject];
[lastPidsArray addObject:currentPidNumber];
NSAssert([lastPidsArray count] == kMaxNumberOfPids, @"invalid count");
}
else
{
[lastPidsArray addObject:currentPidNumber];
NSAssert([lastPidsArray count] <= kMaxNumberOfPids, @"invalid count");
}
[userDefaults setObject:lastPidsArray forKey:ENLastPidsUserDefault];
}
}
В следующем ответе я покажу, как я использовал ASL какао обертку, чтобы получить консоль журналы из последних PIDs (ИКИ должны теперь быть по умолчанию пользователя после выполнения описанной выше методы).
Хорошо, какао-обертка звучит хорошо для меня :) Однако у вас есть образец кода, который демонстрирует, как я буду использовать его в моем случае? Кроме того, вы уверены, что это хорошая идея, что я согласен с ним PID? Я спрашиваю, потому что обычно, когда журналы будут отправлены мне, это будет в следующем запуске приложения, когда он разбился раньше. PID изменяется при последовательном запуске приложения? – Enchilada
Нет, у меня нет образца кода. Прочитайте мои сообщения в блоге, чтобы понять концепции на работе, затем прочитайте заголовки для обертки Дови. API, который он ему дал, в точности соответствует стандарту ASL API. И да, PID отличается для последовательных процессов; поэтому вы хотите его искать, так что вы получите только результат последнего процесса. Вы можете сохранить свой последний PID в настройках по умолчанию пользователя. –
Хорошо, спасибо. Кажется, работает нормально. Для дальнейшего использования я отправлю код здесь, чтобы показать, как я сделал то, что мне было нужно. – Enchilada