Спасибо Abhijith за вашу помощь, и я выяснил причину этой проблемы, я не должен звонить
ReadContactL прямо под TRAPD под Для цикла , поэтому я создал функцию, которая проверяет действительность идентификатора
, и вызвал ее в TRAPD , и теперь мой список контактов хорошо загружается, и недействительные идентификаторы удаляются из
Мой список сохраненных идентификаторов.
Решение состоит в том, чтобы следовать правилам Symbian C ++ при работе с «Оставить»:
void LoadContactsL()
{
CContactDatabase* contactsDb = CContactDatabase::OpenL();
CleanupStack::PushL(contactsDb);
for (TInt i = 0; i < CsIDs.Count(); i++)// looping through contacts.
{
TRAPD(err, ChickValidContactsIDL(i)) //-->Calling IDs checking function under TRAPD
if(KErrNotFound == err)
{
CsIDs.Remove(i);
}
}
CleanupStack::PopAndDestroy(1,contactsDb);
}
// Функция, которая проверяет недопустимые идентификаторы.
// Важное правило Symbian : Возврат " void " для функций, которые " Оставляют " под Жгутом проводов .
void ChickValidContactsIDL(TInt index)
{
CPbkContactEngine* iPbkEngine = CPbkContactEngine::NewL(&iEikonEnv->FsSession());
CleanupStack::PushL(iPbkEngine);
iPbkEngine->OpenContactL(CsIDs[index]);
CleanupStack::PopAndDestroy(1,iPbkEngine);
}