NSMutableArray addObject:给出错误

发布于 2024-12-21 09:52:09 字数 1141 浏览 4 评论 0原文

这是我正在尝试的代码..

但问题是当我第一次加载视图时它起作用..没有给出任何问题..

但是当我尝试再次加载视图并调用此代码时..它给出了错误在 arrMain addObject: 上,

我试图查看它,但没有找到任何东西..

任何人都可以帮忙吗?

NSUserDefaults *ds = [NSUserDefaults standardUserDefaults];
NSMutableArray *arrMain = [ds objectForKey:@"files"];
int i;

if([arrMain count] > 0)
{
    i = [arrMain count] + 1;

}
else
{
    arrMain = [[NSMutableArray alloc] init];  
    i = 1;
}
NSLog(@"File Name To Be Saved %d.txt",i);

NSArray *sd = [[NSArray alloc] init];
sd = [dict componentsSeparatedByString:@"/"];
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init];

[dict1 setObject:[sd objectAtIndex:[sd count] - 1] forKey:@"name"];
NSString *OrgFilename = [sd objectAtIndex:[sd count] - 1];
NSArray *extArr = [[NSArray alloc] init];
extArr = [OrgFilename componentsSeparatedByString:@"."];
NSString *flExt = [extArr    objectAtIndex:1];
[dict1 setObject:[NSString stringWithFormat:@"%d.txt",i,flExt] forKey:@"filename"];

// *** error happens VVVV
[arrMain addObject:dict1];
// *** error happens ^^^^

[ds setObject:arrMain forKey:@"files"];
[ds synchronize];

Here is the code what I am trying..

but the thing is when I load the view first time it works.. doesn't give any problem..

but when i try to load view again and call this code.. it gives error on arrMain addObject:

I am trying to look over it but don't find anything..

can anyone please help??

NSUserDefaults *ds = [NSUserDefaults standardUserDefaults];
NSMutableArray *arrMain = [ds objectForKey:@"files"];
int i;

if([arrMain count] > 0)
{
    i = [arrMain count] + 1;

}
else
{
    arrMain = [[NSMutableArray alloc] init];  
    i = 1;
}
NSLog(@"File Name To Be Saved %d.txt",i);

NSArray *sd = [[NSArray alloc] init];
sd = [dict componentsSeparatedByString:@"/"];
NSMutableDictionary *dict1 = [[NSMutableDictionary alloc] init];

[dict1 setObject:[sd objectAtIndex:[sd count] - 1] forKey:@"name"];
NSString *OrgFilename = [sd objectAtIndex:[sd count] - 1];
NSArray *extArr = [[NSArray alloc] init];
extArr = [OrgFilename componentsSeparatedByString:@"."];
NSString *flExt = [extArr    objectAtIndex:1];
[dict1 setObject:[NSString stringWithFormat:@"%d.txt",i,flExt] forKey:@"filename"];

// *** error happens VVVV
[arrMain addObject:dict1];
// *** error happens ^^^^

[ds setObject:arrMain forKey:@"files"];
[ds synchronize];

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

峩卟喜欢 2024-12-28 09:52:09

问题是您正在尝试从 NSUserDefaults 检索 NSMutableArray。它不会返回 NSMutableArray,而是返回 NSArray。你会想要这样做:

NSMutableArray *arrMain = [[[ds objectForKey:@"files"] mutableCopy] autorelease];

它第一次“工作”的原因是 arrMain 为零,所以你创建了一个有效的 NSMutableArray,然后将其保存到 NSUserDefaults。之后,您得到了一个有效的对象(非零),但它不是您期望的类型。由于 -[NSUserDefaults objectForKey:] 返回 id 类型,因此它很乐意将其分配给您的 NSMutableArray 对象,即使它不是该类型。

The problem is you are trying to retrieve a NSMutableArray from the NSUserDefaults. It will not be returning a NSMutableArray, but a NSArray instead. You will want to do:

NSMutableArray *arrMain = [[[ds objectForKey:@"files"] mutableCopy] autorelease];

The reason it "worked" the first time through was arrMain was nil, so you created a valid NSMutableArray, then saved it into the NSUserDefaults. After that, you got a valid object (non-nil), but it wasn't the type you were expecting. Since -[NSUserDefaults objectForKey:] returns a id type, it happily assigned it your NSMutableArray object, even though it wasn't that type.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文