for (int cnt = 0 ; cnt < nPeople ; cnt++)
{
ABRecordRef ref = CFArrayGetValueAtIndex(allPeople, cnt);
NSString *firstName = (NSString *)ABRecordCopyValue(ref, kABPersonFirstNameProperty);
NSString *lastName = (NSString *)ABRecordCopyValue(ref, kABPersonLastNameProperty);
NSString *fullName;
/* skipped code at here : code to merge firstName and lastName to fullName. In my country, many of us don't separate first name and last name */
// tempKeyString : NSString variable that has key of fullNameArray value for nameDictionary.
// fullNameArray : to keep some fullName variables for tempKeyString.
if (!tempKeyString) // there's no tempKeyString, a.k.a. it's the first fullName.
{
// it's not important to know about GetUTF8String:fullName. It's for my own language.
tempKeyString = [self GetUTF8String:fullName];
[fullNameArray addObject:fullName];
}
else
{
if ([tempKeyString characterAtIndex:0] == [[self GetUTF8String:fullName] characterAtIndex:0]) // if fullName has the same tempKey with fullNameArray.
{
[fullNameArray addObject:fullName];
}
else // if fullName has different tempKey with fullNameArray.
{
//tempKey : key data for fullNameArray
NSString *tempKey = [tempKeyString substringToIndex:1];
// tempDict : to keep the deep copy of nameDictionary before adding new key.
NSDictionary *tempDict = [nameDictionary mutableDeepCopy];
// add new key (tempKey) with new value (fullNameArray)
// PROBLEM : ALL values (including previous values) in dictionary(nameDictionary) are overwritten to a new value(fullNameArray).
[nameDictionary setObject:fullNameArray forKey:tempKey];
//empties fullNameArray so that it can get the new fullName of the new tempKey.
[fullNameArray removeAllObjects];
//refresh tempKeyString, and add the new fullName.
tempKeyString = [self GetUTF8String:fullName];
[fullNameArray addObject:fullName];
...
}
}
}
Я пытаюсь создать объект NSMutableDictionary из контактов моего iPhone. Почему я создаю типизированный объект NSMutableDictionary, так это то, что мне нужны индексы для контактов, и не просто сделать индексы из типизированного объекта ABAddressRef напрямую. Мне также необходимо выполнить функцию поиска.setObject: forKey: of NSMutableDictionary перезаписывает все данные в словаре
Не было проблем, когда я только что закодировал, но после отладки единственная проблема заставляет меня сходить с ума. После того, как я применил массив с именем fullNameArray с ключом tempKey к namedDictionary, я могу найти имяDictionary имеет все значения с ними fullNameArray.
Все предыдущие данные были перезаписаны! Я попытался сделать глубокую скопированную версию предыдущего имениDictionary перед применением fullNameArray и скопировать его в новое имяDictionary. Однако, когда я проверил точку останова на третьей строке, я не могу найти предыдущие данные в tempDict.
Я добавил дополнительные коды и комментарии. Это может помочь больше, чем мое объяснение. Любые вопросы остались довольны!
Я попытался найти причину отсюда - StackOverflow - и другие веб-страницы всю ночь, но я не мог найти подобных проблем .. пожалуйста, помогите мне! Огромное спасибо заранее!!
Может быть, лучше, если вы разместите больше кода и перефразите свой вопрос, я не понимаю ваш вопрос и ваш код, это просто не имеет смысла. –
Спасибо, X Slash! Я новичок в использовании stackoverflow и задаю программные проблемы на английском языке. Я скоро изменю свою работу! –