Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Objective c NSMutableArray addObjects NSString_Objective C_Nsstring_Nsmutablearray - Fatal编程技术网

Objective c NSMutableArray addObjects NSString

Objective c NSMutableArray addObjects NSString,objective-c,nsstring,nsmutablearray,Objective C,Nsstring,Nsmutablearray,我对NSString和NSMutableArray有问题 我有: NSString*msgID; NSMUTABLEARRY*mArray 而msgIDstring是每条消息的唯一ID,每次收到新消息时,它都会自行更改。 现在我想将这些ID保存到NSMutableArray中,以将它们放入plist文件中。 但问题是当我真的喜欢以下内容时 a = [[NSMutableArray alloc] init]; [a addObject:msgID]; 它只保存第一个ID,不保存主题的其余部分 示

我对NSString和NSMutableArray有问题

我有:

NSString*msgID;
NSMUTABLEARRY*mArray

msgID
string是每条消息的唯一ID,每次收到新消息时,它都会自行更改。
现在我想将这些ID保存到NSMutableArray中,以将它们放入plist文件中。

但问题是当我真的喜欢以下内容时

a = [[NSMutableArray alloc] init];
[a addObject:msgID];
它只保存第一个ID,不保存主题的其余部分

示例:如果输出ID为
65465465151
,并且您在一秒钟后收到ID为
21235445
的新消息,则NSMutableArray仅保存第一个输出

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
    <string>65465465151</string>
</array>
</plist>

如果您不想在循环中重复创建数组,那么代码看起来是正常的。每个
addObject
都会将数组放大一倍。确保在按预期方式填充阵列后写入plist文件。确保覆盖所有旧的plist文件

如果这是您的代码,并且它都在一个块中,而不是分散在几个不同的循环中的多个方法中,那么您每次遍历代码块时都会创建一个新的
mArray
实例,因此,数组中最多只有一个条目。

在将第二个对象添加到数组中之前,您似乎正在创建plist。检查一下。或者你每次都在分配新的数组。我以前也看到过类似的错误。你能检查我的编辑吗?看起来你正在为收到的每封邮件重新创建数组。另外,你的路径存在一些奇怪的逻辑错误,我无法找出。你是否意识到你只给plist.plist写代码?
msgIDs.plist
的作用是什么?你的if语句也很混乱,我不能理解你的代码,但是你需要将数组声明和创建移动到比代码块“更全局”的位置。(如果您不理解这一点,那么您可能不应该编写Objective-C——它不是一种非常宽容的语言。)如何暗示数组是在循环中创建的?
NSString *msgID = [viewcontroller.messageID substringFromIndex:[viewcontroller.messageID length] - 21];


NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *path = [documentsDirectory stringByAppendingPathComponent:@"msgIDs.plist"]; 
NSFileManager *fileManager = [NSFileManager defaultManager];
NSMutableArray *mArray;

if (![fileManager fileExistsAtPath:path])  {
       path = [documentsDirectory stringByAppendingPathComponent: [NSString stringWithFormat: @"msgIDs.plist"] ];
} 
if ([fileManager fileExistsAtPath:path])  {
      mArray = [[NSMutableArray alloc] init];
      [mArray addObject:msgID];
} else {
    // If the file doesn’t exist, create an empty dictionary
    mArray = [[NSMutableArray alloc] init];
}
[mArray writeToFile:path atomically:YES];