Я только что запустил ваш код, он не имеет ничего общего с добавлением или удалением ключа. Вы получаете ошибку, когда заполняете свой объект списка
List<Entity> list = db.books.ToList();
foreach(var l in list)
{
list.Add(l);
}
у вас уже есть список книг, так какова цель цикла foreach?
Вы получаете ошибку, потому что добавляете новые объекты при перечислении по списку, это недопустимо, потому что это будет инфинитив
makeObjectsPerformSelector: движение должно выполнить тот селектор против каждого объекта в массиве. Если те объекты будут изменены селектором, то они будут изменены. Это ничего не возвращает. Теперь, существует выгода, которая это по умолчанию большинство копий в Какао является мелкими копиями, что означает, что Вы получаете новый массив, но основные объекты, на которые это указывает, являются теми же объектами. Необходимо будет использовать initWithArray:copyItems, чтобы заставить его скопировать корневые объекты уровня также. Если Вы хотите новый массив, содержащий измененные объекты, а также старый массив делают что-то вроде этого:
NSArray *newArray = [[NSArray alloc] initWithArray:oldArray copyItems:YES];
[newArray makeObjectsPerformSelector:@selector(doSomethingToObject)];
В дополнение к другим ответам, если Вы делаете , хотят, создают новый массив с результатом вызова метода, можно сделать это:
NSArray *derivedArray = [originalArray valueForKey:@"foo"];
Это будет только работа, если Ваши объекты могут обработать 'сообщение' "нечто" -valueForKey:@ и очевидно, только подходят для методов, которые не берут аргументов и возвращают ненулевое значение.
, Если я использую его на массиве, это изменит существующий массив или возвратит новый?
№
Прежде всего, считайте подпись:
- (void)makeObjectsPerformSelector:(SEL)aSelector
void
, без звезд после него, “does средств не возвращают anything”.
makeObjectsPerformSelector:
не видоизменяет приемную антенную решетку, потому что это невозможно.
существует NSMutableArray, и так как это - подкласс NSArray, он наследовался makeObjectsPerformSelector:
. Однако, если бы NSMutableArray изменил поведение того метода, то его документация имела бы его собственный список для метода (см. много определений init
в документации различных классов). Нет такого списка, таким образом, Вы можете безопасно (и правильно) выводят что -[NSMutableArray makeObjectsPerformSelector:]
работы точно тот же путь как -[NSArray makeObjectsPerformSelector:]
.
объекты могут изменить themselvesВ в ответ на Ваше сообщение, но сам массив будет содержать те же объекты после makeObjectsPerformSelector:
как перед ним.
Я надеюсь, что интерпретирую это правильно...
, Если Вы делаете [myArray makeObjectsPerformSelector:someSelector], Вы эффективно просто выполняете итерации через myArray и отправляете селекторное сообщение в каждый объект. Массив неизменен, потому что makeObjectsPerformSelector не позволяют изменить его содержание.
Так в конце, у Вас есть тот же массив с теми же объектами.