, основанный на том, что вы cannot редактировать изменяемые коллекции при перечислении их, это лучшее решение, я мог придумать, чтобы изменить массив NSMutableDictionaries:более быстрый способ мутировать массив NSMutableDictionaries
__block NSMutableDictionary *tempDict = [NSMutableDictionary dictionaryWithCapacity:1];
__block NSUInteger idx;
[_myArray enumerateObjectsUsingBlock:^(NSMutableDictionary* obj,
NSUInteger indx, BOOL *stop) {
if (// some condition is met) {
tempDict = [obj mutableCopy];
idx = indx;
}
}];
[tempDict setObject:[NSNumber numberWithInt:thisQueryResults] forKey:@"resultsNum"];
[_myArray replaceObjectAtIndex:idx withObject:rowSelected];
это кажется слишком сложным (даже для языка, такого как obj-c) .. и поскольку он включает в себя два типа данных (NSMutableArray и NSMutableDictionary), похоже, я не могу их поместить в категорию .. совет?
обновление: один комментарий спросил, почему я создаю mutablecopy (в отличии от просто копии .. так как это копирование изменяемого объекта) ..
предположит, что я просто использовал копию .. если я положил перерыв на tempDict
это то, что я получаю:
// tempDict = [obj copy]
po tempDict
$0 = 0x0b28cc10 <__NSArrayI 0xb28cc10>(
1
)
// tempDict = [obj mutableCopy]
po tempDict
$0 = 0x0b28cc10 <__NSArrayM 0xb28cc10>(//notice the M in __NSArrayM as opposed to I above
1
)
в случае копия .. если я последую его с линии, как это: [tempDict SetObject: [NSNumber numberWithInt: thisQueryResults] forKey: @ "resultsNum"] ;
Я получаю эту ошибку:
[__NSDictionaryI setObject:forKey:]: unrecognized selector sent to instance 0xb245100
Я получаю такие же выше ошибки с this кодом:
for (NSUInteger idx = 0; idx < [_myMutableArray count]; idx++) {
NSMutableDictionary* myMutableDict = _myMutableArray[idx];
[myMutableDict setObject:obj forKey:key];
}
обновление 2: происхождения этой проблемы было инстанцирование не являющиеся изменяемые массивы и словари. Я новичок во всем новом obj-c literals, поэтому я не знал, что для создания NSMutableArray и NSDictionary вы должны сделать это соответственно:
[@[..] mutableCopy]
[@{..} mutableCopy]
+1 для заметив это слишком сложно –