NSCFArray长度错误iOS

NSCFArray长度错误iOS,ios,objective-c,uiimage,nsarray,nsdata,Ios,Objective C,Uiimage,Nsarray,Nsdata,我试图将am NSArray保存到包含元素或对象的现有可变数组中 我成功地将该数组添加到mutablemarray,并记录了该数组,还记录了该数组的数组计数。在我想将5个保存的值添加到我的UITableView之前,一切似乎都正常 我的应用程序崩溃了,出现了一个奇怪的异常。我什么都试过了,但似乎都不管用 我不知道在哪里继续调试 在应用程序的开头保存了Prefs for (NSMutableDictionary *defineXMLData in getSpecialsAuth) { NSArr

我试图将am NSArray保存到包含元素或对象的现有可变数组中

我成功地将该数组添加到mutablemarray,并记录了该数组,还记录了该数组的数组计数。在我想将5个保存的值添加到我的
UITableView
之前,一切似乎都正常

我的应用程序崩溃了,出现了一个奇怪的异常。我什么都试过了,但似乎都不管用

我不知道在哪里继续调试

在应用程序的开头保存了Prefs

for (NSMutableDictionary *defineXMLData in getSpecialsAuth) {

NSArray * imageUrl = [defineXMLData objectForKey:@"imageUrl"];
[specialsimageUrlArray addObject: imageUrl];
[specialsimageUrlArray addObject: test];
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
[prefs setObject:specialsimageUrlArray forKey:@"specialsImageUrlArray"];

}
SpecialsViewController.m

-(void)viewDidLoad {
NSUserDefaults *prefs = [NSUserDefaults standardUserDefaults];
self.specialsArray = [prefs arrayForKey:@"specialsImageUrlArray"];
NSMutableArray *specialsimageUrlArray =[[NSMutableArray alloc]init];
test = [NSArray arrayWithObjects:@"http://dev.wigroup.co/bells/cvs_images/bells3.jpg", nil];           
}

-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
 {
 NSData *imageData= [[NSData alloc] initWithContentsOfURL:[NSURL URLWithString:[self.specialsArray objectAtIndex:indexPath.row]]];    
UIImageView *imageViewForCell = [[UIImageView alloc]initWithFrame:CGRectMake(3,3,30,30)];
imageViewForCell.image = [UIImage imageWithData:imageData];
[imv addSubview:imageViewForCell];

 }
NSLog

错误日志

  -[__NSCFArray length]: unrecognized selector sent to instance 0x15dde4f0
CRASH: -[__NSCFArray length]: unrecognized selector sent to instance 0x15dde4f0
 Stack Trace: (
0   CoreFoundation                      0x2f3bbe9b <redacted> + 154
1   libobjc.A.dylib                     0x397186c7 objc_exception_throw + 38
2   CoreFoundation                      0x2f3bf7b7 <redacted> + 202
3   CoreFoundation                      0x2f3be0af <redacted> + 706
4   CoreFoundation                      0x2f30cdc8 _CF_forwarding_prep_0 + 24
5   CoreFoundation                      0x2f311983 _CFURLInitWithURLString + 38
6   Foundation                          0x2fcf49a1 <redacted> + 212
7   Foundation                          0x2fcf48b3 <redacted> + 50
8   Bells                               0x0009b157 -[SpecialsDetailViewController downloadSpecialImage] + 110
9   Foundation                          0x2fd9633f __NSFireDelayedPerform + 414
10  CoreFoundation                      0x2f386e7f <redacted> + 14
11  CoreFoundation                      0x2f386a9b <redacted> + 794
12  CoreFoundation                      0x2f384e23 <redacted> + 1218
13  CoreFoundation                      0x2f2ef471 CFRunLoopRunSpecific + 524
14  CoreFoundation                      0x2f2ef253 CFRunLoopRunInMode + 106
15  GraphicsServices                    0x340292eb GSEventRunModal + 138
16  UIKit                               0x31ba4845 UIApplicationMain + 1136
17  Bells                               0x00142f61 main + 116
18  libdyld.dylib                       0x39c11ab7 <redacted> + 2
)
-[\uu NSCFArray length]:发送到实例0x15dde4f0的选择器无法识别
崩溃:-[\uu NSCFArray length]:发送到实例0x15dde4f0的选择器无法识别
堆栈跟踪:(
0芯基础0x2f3bbe9b+154
1 libobjc.A.dylib 0x397186c7 objc_异常_抛出+38
2芯基础0x2f3bf7b7+202
3芯基础0x2f3be0af+706
4 CoreFoundation 0x2f30cdc8\u CF\u转发\u准备\u 0+24
5 CoreFoundation 0x2F31983 _CFURLInitWithURLString+38
6基金会0x2FCF49 A1+ 212
7基金会0x2FCF48 B3+ 50
8个铃铛0x0009b157-[SpecialDetailViewController下载SpecialImage]+110
9基金会0x2FD9633 F NSFieldayEdExp+ 414
10芯基础0x2f386e7f+14
11芯基础0x2f386a9b+794
12芯基础0x2f384e23+1218
13 CoreFoundation 0x2f2ef471 CFRunLoopRunSpecific+524
14 CoreFoundation 0x2f2ef253 CFRUNLOOPSRUNINMODE+106
15图形服务0x340292eb GSEventRunModal+138
16 UIKit 0x31ba4845 UIApplicationMain+1136
17铃铛0x00142f61主+116
18 libdyld.dylib 0x39c11ab7+2
)
此日志:

 SpecialsArray (
    "http://dev.wigroup.co/bells/cvs_images/bells1.jpg",
    "http://dev.wigroup.co/bells/cvs_images/bells1.jpg",
    "http://dev.wigroup.co/bells/cvs_images/bells3.jpg",
    "http://dev.wigroup.co/bells/cvs_images/bells2.jpg",
    (
        "http://dev.wigroup.co/bells/cvs_images/bells3.jpg"
    )
)
显示您的specials数组包含4个字符串和1个数组。因此,当您尝试将每个项用作字符串时,您会遇到问题

原因是:

[specialsimageUrlArray addObject: test];
因为
test
是一个数组,所以您应该使用
addObjectsFromArray:
来添加它的内容

SpecialsArray (
    "http://dev.wigroup.co/bells/cvs_images/bells1.jpg",
    "http://dev.wigroup.co/bells/cvs_images/bells1.jpg",
    "http://dev.wigroup.co/bells/cvs_images/bells3.jpg",
    "http://dev.wigroup.co/bells/cvs_images/bells2.jpg",
    (
        "http://dev.wigroup.co/bells/cvs_images/bells3.jpg"
    )
)
当您尝试从前4个URL获取NSData时,它正在工作,但第5个元素是
NSArray
(或
NSMutableArray

所以
NSData*imageData=[[NSData alloc]initWithContentsOfURL:[NSURL URLWithString:[self.specialsaray objectAtIndex:indexPath.row]]行在执行
[nsurlWithString:[self.specialArray objectAtIndex:indexath.row]
操作时遇到问题,即从
NSString
将数组对象转换为
NSURL
但它是一个数组。这就是原因

您应该使用
isKindOfClass

一个小例子

if([[self.specialsArray objectAtIndex:indexPath.row] isKindOfClass:[NSString class]])

{
  // It's NSString
}
else if([[self.specialsArray objectAtIndex:indexPath.row] isKindOfClass:[NSArray class]] || [[self.specialsArray objectAtIndex:indexPath.row] isKindOfClass:[NSMutableArray class]])
{
   // It's an array
}

你能添加这个方法吗?[SpecialsDetailViewController downloadSpecialImage]specialsimageUrlArray的类型是什么?我怀疑消息(
length
)最初打算发送到字符串(对我来说似乎是某种URL解析的东西),但由于某种原因(内存损坏?)已发送到数组。
if([[self.specialsArray objectAtIndex:indexPath.row] isKindOfClass:[NSString class]])

{
  // It's NSString
}
else if([[self.specialsArray objectAtIndex:indexPath.row] isKindOfClass:[NSArray class]] || [[self.specialsArray objectAtIndex:indexPath.row] isKindOfClass:[NSMutableArray class]])
{
   // It's an array
}