簡體   English   中英

如何將NSDictionary類型的對象添加到包含NSDictionaryResultType對象的NSMutableArray中?

[英]How to add object of NSDictionary type to an NSMutableArray which contains objects of NSDictionaryResultType?

我正在使用以下代碼從Core Data中獲取數據-

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];

包含以上代碼的函數向我返回了NSDictionaryType的NSArray。 在視圖控制器上,我將它們存儲到viewdidload函數中的NSMutableArray *消息中。 現在,如果收到或發送了新消息,我想將新的NSDictionary存儲到消息中。 這樣做會產生錯誤:

由於未捕獲的異常“ NSInvalidArgumentException”而終止應用程序,原因:“-[__ NSArrayI addObject:]:無法識別的選擇器已發送到實例0x9740230”

代碼獲取數據

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

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

我在郵件中添加對象的代碼

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];

僅僅因為您宣布狗是貓,並不意味着它會突然“變苗”。 它仍然是只狗,只穿着貓的衣服。 現在請注意。 問題是您正在嘗試將東西放入不可變的NSArray中。 一旦創建了一個不可變的數組,就無法更改其內容。

你可以試試這個

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

您應該在NSArray上使用NSMutableArray,NSArray不包含方法addObject。 您可以創建可變副本,例如:

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

現在,您可以隨意在該對象上調用addObject方法。

您能否提供您在此處引用的其他代碼? (例如,您說您將從上述獲取中獲得的消息存儲在NSMutableArray中。在聲明為可變數組的地方顯示代碼,在實例化該代碼,並在獲取結果中添加代碼。) 從錯誤消息來看,您正在嘗試將對象添加到NSArray,而不是添加到NSMutableArray。

您能否提供您在此處引用的其他代碼? (例如,您說您將從上述獲取中獲得的消息存儲在NSMutableArray中。在聲明為可變數組的地方顯示代碼,在實例化該代碼,並在獲取結果中添加代碼。) 從錯誤消息來看,您正在嘗試將對象添加到NSArray,而不是添加到NSMutableArray。

好的,因此您正在創建一個NSMutableArray並將其指針存儲在“消息”中。 但是,然后您為“消息”分配了一個不同的指針。 您將不可更改的結果集分配給它。 你不應該那樣做。 取而代之的是,僅將獲取中的對象添加到消息對象中。 像[messages addObjectsFromArray:fetchresults]之類的東西;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM