2014-02-01 1 views
1

я выборки данных из основных данных с следующей code-Как добавить объект типа NSDictionary в NSMutableArray, который содержит объекты NSDictionaryResultType?

NSManagedObjectContext *context=[[self appDelegate] managedObjectContext]; 

NSEntityDescription *entityDesc=[NSEntityDescription entityForName:@"Messages" inManagedObjectContext:context]; 
NSFetchRequest *request=[[NSFetchRequest alloc] init]; 
[request setEntity:entityDesc]; 
[request setResultType:NSDictionaryResultType]; 
NSArray *objects=[context executeFetchRequest:request error:&error]; 

функции, содержащей код выше возвращает мне NSArray из NSDictionaryType. На контроллере представления я сохранил их в сообщениях NSMutableArray * в функции viewdidload. Теперь, если новые сообщения получены или отправлены, я хочу сохранить этот новый NSDictionary для сообщений. Это порождает ошибки:

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSArrayI addObject:]: unrecognized selector sent to instance 0x9740230'

код, чтобы получить DATA-

CoreDataHandler *handler=[[CoreDataHandler alloc] init]; 

NSMutableArray *messages=[[NSMutableArray alloc]initWithObjects: nil]; 
messages=(NSMutableArray *)[handler fetchMessages:[chatWithUser objectForKey:@"jidStr"]]; 

код, где я добавляю объект messages-

NSMutableDictionary *m = [[NSMutableDictionary alloc] init]; 
[m setObject:messageStr forKey:@"msg"]; 
[m setObject:@"you" forKey:@"sender"]; 
[m setObject:[NSString getCurrentTime] forKey:@"createdAt"]; 
[messages addObject:(NSDictionary *) m]; 
+2

Похоже, вы пытаетесь вызвать «addObject:» в NSArray вместо вашего NSMutableArray, разместите соответствующий код, в который вы добавляете объекты в свой массив. – Daniele

+0

Вы не можете добавить объект в не изменяемый массив. –

+1

И если вы инициализируете указатель в одной строке и затем устанавливаете указатель на другое значение в самой следующей строке, эта первая строка была бесполезной. –

ответ

1

Вы должны использовать NSMutableArray вместо этого на NSArray, NSArray не содержит метод AddObject. Вы можете создать изменяемую копию, как:

NSMutableArray *objects=[[context executeFetchRequest:request error:&error] mutableCopy; 

Теперь вы можете вызвать метод AddObject на этом объекте.

+0

спасибо за быстрый ответ –

1

Просто потому, что вы объявляете собаку, чтобы быть кошка, это не значит, что это будет «миау» внезапно. Это еще собака, только в кошачьей одежде. Теперь серьезно. Проблема в том, что вы пытаетесь поместить вещи в NSArray, который является неизменным. После создания неизменяемого массива вы не можете изменить его содержимое.

Вы могли бы попробовать это

NSMutableArray *objects=[[context executeFetchRequest:request error:&error] mutable copy]; 
+0

ОК, спасибо. Я понимаю проблему и успешно ее исправил. –

0

Не могли бы вы предоставить другие фрагменты кода, которые вы здесь имеете в виду? (Например, вы говорите, что сохраняете сообщения, полученные из приведенной выше выборки, в NSMutableArray. Покажите код, в котором он объявлен изменчивым массивом, где он инстанцируется, и код, в который добавляются результаты выборки). Судя по сообщению об ошибке, вы пытаетесь добавить объект в NSArray, а не в NSMutableArray.

0

Не могли бы вы предоставить другие фрагменты кода, на которые вы ссылаетесь здесь? (Например, вы говорите, что сохраняете сообщения, полученные из приведенной выше выборки, в NSMutableArray. Покажите код, в котором он объявлен изменчивым массивом, где он инстанцируется, и код, в который добавляются результаты выборки). Судя по сообщению об ошибке, вы пытаетесь добавить объект в NSArray, а не в NSMutableArray.

ОК, поэтому вы создаете NSMutableArray и сохраняете его указатель в 'сообщениях'. Но тогда вы назначаете другой указатель на «сообщения». Вы назначаете ему не изменяемый результат. Вы не должны этого делать. Вместо этого просто добавьте объекты из выборки в объект сообщений. Что-то вроде [сообщений addObjectsFromArray: fetchresults];

Смежные вопросы