我正在编写一个应用程序,其中我有一个以JSON格式从服务器接收的用户列表。后来我从JSON中提取了每个用户的数据,并创建了一个名为UsersController的对象,其中包含四个字段(我不知道这是否是足够的单词),名为prod_id,userName,userThumb和createTime。在我的ViewController中,我有一个UsersController对象和一个用于存储所有用户的数组。 UsersController类的代码是:
//UsersController.h
#import <UIKit/UIKit.h>
@interface UsersController : NSObject{
NSInteger *prof_id;
NSString *createTime;
NSString *fullName;
NSString *thumb;
}
@property (nonatomic) NSInteger *prof_id;
@property (nonatomic, retain) IBOutlet NSString *createTime;
@property (nonatomic, retain) IBOutlet NSString *fullName;
@property (nonatomic, retain) IBOutlet NSString *thumb;
@end
//UsersController.m
#import "UsersController.h"
@implementation UsersController
@synthesize prof_id;
@synthesize fullName;
@synthesize createTime;
@synthesize thumb;
@end
在ViewController.m中,我有以下代码:
-(void)connectionDidFinishLoading:(NSURLConnection *)connection
{
NSAutoreleasePool *pool=[[NSAutoreleasePool alloc] init];
NSArray *array_webdata=[[NSArray array] init];
NSString *searchStatus = [[NSString alloc] initWithData:webData encoding:NSUTF8StringEncoding];
array_webdata = [parsedata objectWithString:searchStatus error:nil];
//String with all data of each user
NSString *usersList = [array_webdata valueForKey:@"results"];
NSLog(@"\n usersList =\n %@ \n", usersList);
//extract data from the JSON data received from the server
NSArray *userName = [usersList valueForKey:@"fullname"];
NSArray *userID = [usersList valueForKey:@"prof_id"];
NSArray *userThumb = [usersList valueForKey:@"thumb"];
NSArray *userCreateTime = [usersList valueForKey:@"createTime"];
NSMutableArray *arrayUsuarios = [[NSMutableArray alloc] initWithCapacity: [userID count]];
int i;
UsersController *usuarioSimple;
UsersController *usuarioAuxiliar;
for (int i=0; i<[userName count]; i++) {
usuarioSimple = [[UsersController alloc] init];
usuarioAuxiliar= [[UsersController alloc] init];
//I store in the object called usuario the extracted data from JSON userName, userID, userThumb y userCreateTime
usuarioSimple.prof_id = [userID objectAtIndex:i];
usuarioSimple.fullName = [userName objectAtIndex:i];
usuarioSimple.thumb = [userThumb objectAtIndex:i];
usuarioSimple.createTime = [userCreateTime objectAtIndex:i];
[arrayUsuarios addObject:usuarioSimple];
usuarioAuxiliar = [arrayUsuarios objectAtIndex:i];
NSLog(@"pruebaConsulta.prof_id[%@]: %@",i, usuarioAuxiliar.prof_id);
NSLog(@"pruebaConsulta.fullName[%@]: %@",i, usuarioAuxiliar.fullName);
NSLog(@"pruebaConsulta.thumb[%@]: %@",i, usuarioAuxiliar.thumb);
NSLog(@"pruebaConsulta.createTime[%@]: %@\n",i, usuarioAuxiliar.createTime);
[usuarioSimple release];
[usuarioAuxiliar release];
}
[searchStatus release];
[connection release];
[webData release];
[pool drain];
}
这里我有两个问题。第一个是在bucle中使用的 i 的声明。我不知道为什么但是当我执行时,当它必须显示 i 的值时,显示(null)。
第二个问题是当我使用[userID count],[userName count],[userThumb count]或[userCreateTime count]时。这条指令不起作用,因为如果我写这行:
NSLog(@"userid count: %@", [userID count]);
执行崩溃并说EXC_BAD_ACCESS。 我证明了很多可能的解决方案,但总是失败,请我帮忙。感谢。
ps:对不起我的英语!
答案 0 :(得分:2)
您必须使用%i
或%d
在格式化字符串中包含整数。请参阅String Format Specifiers。
答案 1 :(得分:1)
count将返回一个原始整数。
%@用于打印字符串或任何对象的字符串描述。
正如DrummerB所说的那样使用%i或%d来表示整数。
NSLog(@"userid count: %d", [userID count]);
你得到了EXC_BAD_ACCESS,因为NSLog认为你已经传递了一个指向一个对象的指针,这对你来说是一个糟糕的访问。
答案 2 :(得分:1)
NSInteger不是一个对象,它是一个类型,你将prof_id声明为NSInteger *,这意味着指向整数而不是对象的指针。
您不能将消息传递给NSInteger或它的指针,因为它不是对象。您也无法将其添加到数组或字典中。您想使用NSNumber,它封装了一个数字(例如整数)。然后,您可以将NSNumber作为对象传递,但通过向它发送integerValue消息来检索整数值。
NSInteger myInt = myNumber.integerValue;
答案 3 :(得分:1)
少数事情:
1.执行此操作时:NSLog(@&#34;用户ID计数:%@&#34;,[userID计数]); 使用%d代替%@。
执行此操作时: [arrayUsuarios addObject:usuarioSimple]; //你在最后一个索引处添加了对象。
usuarioAuxiliar = [arrayUsuarios objectAtIndex:i]; //这里你在索引i访问对象,如果我&gt; [arrayUsuarios count],它会崩溃。
在这种情况下,您调用此方法:[arrayUsuarios lastObject];