Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Getting Null values after a successful looking in RestKit

I believe I am skipping an important step or calling my properties wrong. In my application, After creating a POST object with the login info, I am not able to use this info from my mapped objects(meaning I am getting empty values). I assumed that after creating the post request and response request, I should be able to use my saved values from my NSObjectClass.

My question

How to save the values, after a post request mapping? If someone can provide my an example how to how use the response.body values, that would be really helpful. Thank you.

my classes

#import <Foundation/Foundation.h>

@interface AccountsClass : NSObject

@property (nonatomic, strong)           NSString *DeviceType;
@property (nonatomic,strong)            NSString *HardwareId;
@property (nonatomic,strong)            NSString *NickName;
@property (nonatomic,strong)            NSNumber *HelpCreditsBalance;
@property (nonatomic,assign)            BOOL GotRatingCreditBonus;
@property (nonatomic,strong)            NSNumber *AccountId;
@end

And this is the method I am using for the POST request

-(void)loadPostRequest 
{

    _StoreIdentifierForVendor = [[[UIDevice currentDevice]identifierForVendor]UUIDString];
    _StoreTheModel = [UIDevice currentDevice].model;
    _nickname = usernameTextField.text;

    AccountsClass *AccountInfo = [[AccountsClass alloc] init];
    AccountInfo.NickName = _nickname;
    AccountInfo.HardwareId =_StoreIdentifierForVendor;
    AccountInfo.DeviceType =_StoreTheModel;
    AccountInfo.AccountId =nil;
    AccountInfo.GotRatingCreditBonus = FALSE;
    AccountInfo.HelpCreditsBalance = nil;

    //this is where the POST request begins

    RKObjectMapping *responseMapping = [RKObjectMapping mappingForClass:[AccountsClass class]];
    [responseMapping addAttributeMappingsFromArray:@[@"NickName", @"HardwareId", @"DeviceType",@"AccountId"]];

    NSIndexSet *statusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); // Anything in 2xx
    RKResponseDescriptor *AccountDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:responseMapping method:RKRequestMethodAny pathPattern:nil keyPath:nil statusCodes:statusCodes];


    RKObjectMapping *requestMapping = [RKObjectMapping requestMapping]; // objectClass == NSMutableDictionary
    [requestMapping addAttributeMappingsFromArray:@[@"NickName", @"HardwareId", @"DeviceType",@"AccountId"]];
    // For any object of class Article, serialize into an NSMutableDictionary using the given mapping and nest
    // under the 'article' key path
    RKRequestDescriptor *requestDescriptor = [RKRequestDescriptor requestDescriptorWithMapping:requestMapping objectClass:[AccountInfo class] rootKeyPath:nil method:RKRequestMethodAny];
    RKObjectManager *manager = [RKObjectManager managerWithBaseURL:[NSURL URLWithString:@"http://10.15.1.105:XXXX"]];
    [manager addRequestDescriptor:requestDescriptor];
    [manager addResponseDescriptor:AccountDescriptor];


    [manager postObject:AccountInfo path:@"/Accounts" parameters:nil success: ^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) {
        RKLogInfo(@"Load collection of Articles: %@", mappingResult.array);
        [self performSegueWithIdentifier:@"SegueFromLoginToWelcomeView" sender:self];

        NSLog(@"the firs tobject %@",[mappingResult firstObject]);

    } failure:^(RKObjectRequestOperation *operation, NSError *error) {
        RKLogError(@"Operation failed with error: %@", error);
    }];

    RKLogConfigureByName("*", RKLogLevelTrace); // set all logs to trace,

}

and in my next view controller,this is how I am trying to get the value.

- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    AccountsClass *PrintloginName = [[AccountsClass alloc]init];
    welcomeLabel.text =[PrintloginName NickName];
    NSLog(@"visibility test %@",welcomeLabel.text);

}

Console Logs

2013-11-09 15:44:41.066 GuessTheImage[4913:70b] I restkit:RKLog.m:33 RestKit logging initialized...
2013-11-09 15:44:46.859 GuessTheImage[4913:70b] LoginViewController - Submit Action 
2013-11-09 15:44:46.868 GuessTheImage[4913:70b] T restkit.network:RKObjectRequestOperation.m:148 POST 'http://10.15.1.105.XXXX/Accounts':
request.headers={
    Accept = "application/json";
    "Accept-Language" = "en;q=1, fr;q=0.9, de;q=0.8, zh-Hans;q=0.7, zh-Hant;q=0.6, ja;q=0.5";
    "Content-Type" = "application/x-www-form-urlencoded; charset=utf-8";
    "User-Agent" = "GuessTheImage/1.0 (iPhone Simulator; iOS 7.0.3; Scale/2.00)";
}
request.body=DeviceType=iPhone%20Simulator&HardwareId=0F9B444B-FA08-4422-B154-B8F6861D41FB&NickName=skrillex2
2013-11-09 15:44:47.410 GuessTheImage[4913:f03] D restkit.object_mapping:RKMapperOperation.m:378 Executing mapping operation for representation: {
    AccountId = 1128;
    DeviceType = "iPhone Simulator";
    GotRatingCreditBonus = 0;
    HardwareId = "0F9B444B-FA08-4422-B154-B8F6861D41FB";
    HelpCreditsBalance = 50;
    NickName = skrillex2;
}
 and targetObject: <AccountsClass: 0x8b9aa00>
2013-11-09 15:44:47.412 GuessTheImage[4913:f03] T restkit.object_mapping:RKMapperOperation.m:321 Examining keyPath '<null>' for mappable content...
2013-11-09 15:44:47.413 GuessTheImage[4913:f03] D restkit.object_mapping:RKMapperOperation.m:301 Found mappable data at keyPath '<null>': {
    AccountId = 1128;
    DeviceType = "iPhone Simulator";
    GotRatingCreditBonus = 0;
    HardwareId = "0F9B444B-FA08-4422-B154-B8F6861D41FB";
    HelpCreditsBalance = 50;
    NickName = skrillex2;
}
2013-11-09 15:44:47.414 GuessTheImage[4913:f03] D restkit.object_mapping:RKMapperOperation.m:230 Asked to map source object {
    AccountId = 1128;
    DeviceType = "iPhone Simulator";
    GotRatingCreditBonus = 0;
    HardwareId = "0F9B444B-FA08-4422-B154-B8F6861D41FB";
    HelpCreditsBalance = 50;
    NickName = skrillex2;
} with mapping <RKObjectMapping:0x8b94680 objectClass=AccountsClass propertyMappings=(
    "<RKAttributeMapping: 0x8b8b210 NickName => NickName>",
    "<RKAttributeMapping: 0x8b8b230 HardwareId => HardwareId>",
    "<RKAttributeMapping: 0x8b9cf20 DeviceType => DeviceType>",
    "<RKAttributeMapping: 0x8b9cf40 AccountId => AccountId>"
)>
2013-11-09 15:44:47.415 GuessTheImage[4913:f03] D restkit.object_mapping:RKMappingOperation.m:851 Starting mapping operation...
2013-11-09 15:44:47.415 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:852 Performing mapping operation: <RKMappingOperation 0x8cad4c0> for 'AccountsClass' object. Mapping values from object {
    AccountId = 1128;
    DeviceType = "iPhone Simulator";
    GotRatingCreditBonus = 0;
    HardwareId = "0F9D844B-FA08-4422-B254-B8F6861F41FB";
    HelpCreditsBalance = 50;
    NickName = skrillex2;
} to object <AccountsClass: 0x8b9aa00> with object mapping (null)
2013-11-09 15:44:47.416 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:440 Mapping attribute value keyPath 'NickName' to 'NickName'
2013-11-09 15:44:47.416 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:429 Found transformable value at keyPath 'NickName'. Transforming from class '__NSCFString' to 'NSString'
2013-11-09 15:44:47.417 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:475 Skipped mapping of attribute value from keyPath 'NickName to keyPath 'NickName' -- value is unchanged (skrillex2)
2013-11-09 15:44:47.417 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:440 Mapping attribute value keyPath 'HardwareId' to 'HardwareId'
2013-11-09 15:44:47.417 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:429 Found transformable value at keyPath 'HardwareId'. Transforming from class '__NSCFString' to 'NSString'
2013-11-09 15:44:47.418 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:475 Skipped mapping of attribute value from keyPath 'HardwareId to keyPath 'HardwareId' -- value is unchanged (0F9D844B-FA08-4422-B254-B8F6861F41FB)
2013-11-09 15:44:47.418 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:440 Mapping attribute value keyPath 'DeviceType' to 'DeviceType'
2013-11-09 15:44:47.420 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:429 Found transformable value at keyPath 'DeviceType'. Transforming from class '__NSCFString' to 'NSString'
2013-11-09 15:44:47.420 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:475 Skipped mapping of attribute value from keyPath 'DeviceType to keyPath 'DeviceType' -- value is unchanged (iPhone Simulator)
2013-11-09 15:44:47.421 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:440 Mapping attribute value keyPath 'AccountId' to 'AccountId'
2013-11-09 15:44:47.421 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:429 Found transformable value at keyPath 'AccountId'. Transforming from class '__NSCFNumber' to 'NSNumber'
2013-11-09 15:44:47.421 GuessTheImage[4913:f03] T restkit.object_mapping:RKMappingOperation.m:460 Mapped attribute value from keyPath 'AccountId' to 'AccountId'. Value: 1128
2013-11-09 15:44:47.421 GuessTheImage[4913:f03] D restkit.object_mapping:RKMappingOperation.m:920 Finished mapping operation successfully...
2013-11-09 15:44:47.422 GuessTheImage[4913:f03] D restkit.object_mapping:RKMapperOperation.m:404 Finished performing object mapping. Results: {
    "<null>" = "<AccountsClass: 0x8b9aa00>";
}
2013-11-09 15:44:47.425 GuessTheImage[4913:4f0f] T restkit.network:RKObjectRequestOperation.m:218 POST 'http://10.15.1.105:XXXX/Accounts' (201 Created / 1 objects) [request=0.5414s mapping=0.0155s total=0.5654s]:
response.headers={
    "Cache-Control" = "no-cache";
    "Content-Length" = 178;
    "Content-Type" = "application/json; charset=utf-8";
    Date = "Sat, 09 Nov 2013 23:44:41 GMT";
    Expires = "-1";
    Pragma = "no-cache";
    Server = "Microsoft-IIS/8.0";
    "Set-Cookie" = "ARRAffinity=c390b30098dd5ae543210f9431ef79195d0285397a590e0175ce17a5951ea041;Path=/;Domain=e.azurewebsites.net, WAWebSiteSID=af7b9190880945d5938dd9725eecb045; Path=/; HttpOnly";
    "X-AspNet-Version" = "4.0.30319";
    "X-Powered-By" = "ASP.NET";
}
response.body={"DeviceType":"iPhone Simulator","HardwareId":"0F9D844B-FA08-4422-B254-B8F6861F41FB","NickName":"skrillex2","HelpCreditsBalance":50,"GotRatingCreditBonus":false,"AccountId":1128}
2013-11-09 15:44:47.425 GuessTheImage[4913:70b] I app:LoginViewController.m:107 Load collection of Articles: (
    "<AccountsClass: 0x8b9aa00>"
)
2013-11-09 15:44:47.430 GuessTheImage[4913:70b] the firs tobject <AccountsClass: 0x8b9aa00>
2013-11-09 15:44:47.440 GuessTheImage[4913:70b] visibility test (null)
like image 612
Matt Avatar asked Oct 21 '22 20:10

Matt


1 Answers

When you do:

AccountsClass *PrintloginName = [[AccountsClass alloc]init];

You create a completely new account class instance unrelated to any mapped instance.

You should be intercepting the segue (by implementing prepareForSegue:sender: on the view controller that triggers the segue) to get the destination view controller and then passing the mapped object (from mappingResult) to it.

like image 160
Wain Avatar answered Oct 23 '22 10:10

Wain