我想更改来自Web服务器的特定密钥的值。 我的代码是这样的
NSMutableArray *forumTopicData = [[NSMutableArray alloc] init];
NSArray *columnArrayNames = [NSArray arrayWithObjects:@"user_id",@"class_id",@"role_id", @"first_name",@"last_name",@"photo_image_url",@"email_address",@"webpage",@"home_phone",@"office_phone",@"cell_phone",@"aboutme",@"gender",@"is_online",@"role_title",@"display_name",nil];
[tempDict setObject:tempValue forKey:[columnArrayNames objectAtIndex:i]]; //storing in array after getting from sqlite table
[forumTopicData addObject:tempDict];
任何人都可以告诉我如何操纵来自服务器的键值对的值?
答案 0 :(得分:0)
您不希望在应用内更改密钥。在服务器端的开发过程中,键名可以随时更改,当它们执行时,您的代码将会中断,您将发现自己正在搜索应用程序代码,试图修复每个键名。
正如Yogi雄辩地提到的那样,你想要创建一个继承自NSObject
类的类,其中将有属性映射到键。您可以按此类的对象表示每个实体。
这是怎么做的。
第1步:
创建自定义数据模型,使数据管理更轻松,更清洁。
创建两个名为ForumTopicDataModel.h
和ForumTopicDataModel.m
的新文件。它们将是NSObject
类的子类。
这就是您的.h
文件的样子:
#import <Foundation/Foundation.h>
@interface ForumTopicDataModel : NSObject
/*
@"user_id", @"class_id", @"role_id", @"first_name", @"last_name", @"photo_image_url",
@"email_address", @"webpage", @"home_phone", @"office_phone", @"cell_phone",
@"aboutme", @"gender", @"is_online", @"role_title", @"display_name"
*/
/*
Notice the naming convention used with a prefix of the class name. This make it easy to see all the properties of this particular class during text autocompletion when you are programming.
*/
@property (assign) NSInteger userId;
@property (assign) NSInteger userRoleId;
@property (nonatomic, retain) NSString * userFirstName;
//Do the same for the rest of the keys that you have.
-(id)initWithJSONData:(NSDictionary*)data;
@end
并在您的.m
文件中,您将拥有以下内容:
#import "ForumTopicDataModel.h"
@implementation ForumTopicDataModel
@synthesize userId;
@synthesize userRoleId;
@synthesize userFirstName;
//Keep synthesising the rest
/*
This is where you explicitly write down the keys.
*/
-(id)initWithJSONData:(NSDictionary*)data{
if (self = [super init]) {
self.userId = [[data objectForKey:@"user_id"] integerValue];
self.userRoleId = [[data objectForKey:@"role_id"] integerValue];
self.userRoleId = [data objectForKey:@"first_name"];
//continue for the rest of your keys
}
return self;
}
@end
我们这样做,因为它包含易于使用的容器。它也是管理自定义json对象的好方法。
第2步
现在,在视图控制器中,您将填充数据库并对数据进行分类,请确保导入自定义ForumTopicDataModel.h
文件
NSMutableDictionary *myData = [[NSMutableDictionary alloc] init];
//Have a for loop that iterates through your array
for(NSDictionary *currentItem in serverArray){
ForumTopicDataModel *newItem = [[ForumTopicDataModel alloc] initWithJSONData:currentItem];
[myForumsArray addObject:newItem];
}
现在,只要您需要访问特定论坛的特定属性,只需访问要从ForumTopicDataModel对象检索的属性值的属性名称。这样做的好处在于它可以保持所有代码的清洁,并使代码易于调试。
那就是兄弟。古德勒克
免责声明,我还没有测试过此代码,但这应该可以直接使用:)