dateByAddingComponents method error - xcode4.5

Using NSCalendar and its method dateByAddingComponents:toDate:options: the method sometimes return a wrong value. For instante:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *components = [[NSDateComponents alloc] init];
[components setYear:2013];
[components setMonth:2];
[components setDay:27];
NSDate *date = [calendar dateFromComponents:components];
NSLog(#"%#", date); // 2013-02-27
NSDateComponents *addingComponents = [[NSDateComponents alloc] init];
[addingComponents setMonth:1];
[addingComponents setDay:4]; // value 5 give the same result.
date = [calendar dateByAddingComponents:addingComponents toDate:date options:0];
NSLog(#"%#", date); // 2013-03-31
The console log: 2013-02-27 and 2013-03-31.
Now, if a change the day component value to 5, the method return the same NSDate, but if a change to 6, the date if 2013-04-01.
Anyone has an answer for this behavior? Thanks on advance.
Rafael Cruz Márquez.

Related

How to use OCMock to return different result base on different argument

I am trying to mock different method return when passing different argument for the same method.
self.myMock = [OCMockObject mockForClass:[MyClass class]];
[[[self.myMock expect] andReturnValue:5] myStaticMethod:3];
[[[self.myMock expect] andReturnValue:10] myStaticMethod:6];
But it only takes the first one, when argument is 3 then return 5, and when argument is 6, it return nil instead of 10. Does anyone know whether is a way to test this?
the real code:
-(NSMutableArray*)convertChildStringToChildDic:(NSString*)strchildren
{
NSArray *kididarray = [strchildren componentsSeparatedByString:#","];
//处理小孩信息
/*children = (
{
avatarSmall = "<null>";
currentStatus = 0;
displayName = stu1;
"id_str" = "70938032-3811-e411-946a-005056c00008";
title = Child;
}
)*/
NSMutableArray *rstchildarray = [NSMutableArray arrayWithCapacity:1];
for (NSString *enrollment_id in kididarray) {
if (enrollment_id.length <= 0) {
continue;
}
**NSMutableDictionary *mdic = [[RoomInfoManager sharedManager] getKidDictionaryByID:enrollment_id];**
[mdic setValue:enrollment_id forKey:#"id_str"];
if (mdic != nil) {
[rstchildarray addObject:mdic];
}
}
return rstchildarray;
}
Test:
-(void) testconvertChildStringToChildDic_InvalidAgruments {
NSMutableDictionary *childdic = [[NSMutableDictionary alloc] init];
childdic[#"id"] = #"josh";
NSMutableDictionary *childdic1 = [[NSMutableDictionary alloc] init];
childdic1[#"id"] = #"joy";
id mockRIM = OCMClassMock([RoomInfoManager class]);
**OCMStub([mockRIM getKidDictionaryByID:#"josh"]).andReturn(childdic);
**OCMStub([mockRIM getKidDictionaryByID:#"joy"]).andReturn(childdic1);****
RoomInfoManager *roomInfoMgr = [RoomInfoManager alloc];
id mockPartialRIM = OCMPartialMock(roomInfoMgr);
OCMExpect([mockPartialRIM sharedManager]).andReturn(mockRIM); // use expect
NSString *childStr = #"josh,joy";
NSMutableArray *childarray = [[ReportOperator alloc] convertChildStringToChildDic:childStr];
NSDictionary *childrenArraydic = #{#"id" : #"josh", #"id_str": #"josh"};
NSMutableArray *resultArray = [NSMutableArray arrayWithObjects:childrenArraydic, nil];
[mockPartialRIM verify]; // verify expect,验证该对像是否被调用。
XCTAssertEqualObjects(childarray, resultArray);
}
the second call
OCMStub([mockRIM getKidDictionaryByID:#"joy"]).andReturn(childdic1);
does not seem take effect and return nil instead.

Pay U IOS SDK 3.2 Seamless Integration - Mandatory Parameter FURL missing

I am new to Payment gateway integration. I am integrating the latest PAY U SDK version 3.2 seamless in my App. I am following the code as per the sample App.
I have the key and salt values.
But the Payment is not happening and it always throws an error as mandatory parameter furl is missing. What am i doing wrong.
I am filling in the surl and furl and then creating the request.
should i add something in the project plist file.
I am using xcode 6.3 , ios 8.3 and running on simulator
/Generate the random transaction id/
NSString *letters = #"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
NSMutableString *randomString = [NSMutableString stringWithCapacity: 15];
for (int i=0; i<15; i++) {
[randomString appendFormat: #"%C", [letters characterAtIndex: arc4random_uniform((u_int32_t)[letters length])]];
}
self.paymentParamForPassing = [PayUModelPaymentParams new];
self.paymentParamForPassing.key = #"gtKFFx";//#"gtKFFx";
self.paymentParamForPassing.transactionID = #"Ywism0Q9XC88qvy";
self.paymentParamForPassing.amount = #"1";//[#(self.amountToPay) stringValue];
self.paymentParamForPassing.productInfo = #"Nokia";//[NSString stringWithFormat:#"%#-%#_%#",self.selectedDeal.title,self.displayCheckInDate,self.displayCheckOutDate];
self.paymentParamForPassing.firstName = #"Ram";//self.currentUser.name;
self.paymentParamForPassing.email = #"email#testsdk1.com";//self.currentUser.email;
self.paymentParamForPassing.userCredentials = #"ra:ra";
self.paymentParamForPassing.phoneNumber = #"1111111111";
self.paymentParamForPassing.SURL = #"https://payu.herokuapp.com/ios_success";
self.paymentParamForPassing.FURL = #"https://payu.herokuapp.com/ios_failure";
self.paymentParamForPassing.udf1 = #"u1";
self.paymentParamForPassing.udf2 = #"u2";
self.paymentParamForPassing.udf3 = #"u3";
self.paymentParamForPassing.udf4 = #"u4";
self.paymentParamForPassing.udf5 = #"u5";
self.paymentParamForPassing.environment = ENVIRONMENT_MOBILETEST;
self.paymentParamForPassing.offerKey = #"test123#6622";
self.paymentParamForPassing.hashes.paymentHash = #"ade84bf6dd9da35d0aab50a5bf61d6272ab0fc488b361b65c66745054aacf1900e3c60b5022d2114bae7360174ebcb3cd7185a5d472e5c99701e5e7e1eccec34";
self.paymentParamForPassing.hashes.paymentRelatedDetailsHash = #"915299224c80eff0eb2407b945a5087556292f58baca25fd05a0bceb6826aa9eb531810001dd4b4677dd928dd60d39eecf843b2189f213f9bb82c5a9483e3aac";
self.paymentParamForPassing.hashes.VASForMobileSDKHash = #"5c0314c2781876f7e0a53676b0d08e1457dafe904d2d15d948626b57409538d51093eef4f15c792b1b9651be7b5659efdd45926e43a1145d68cea094687011ca";
self.paymentParamForPassing.hashes.deleteUserCardHash = #"03e10e892005755f91061121036fb1b10f46202b4138d182f153c5de5c7fd44930ed94b32fac230e59bac1e4ca123aca3297e4b9d25024bf13237db9721fec1a";
self.paymentParamForPassing.hashes.offerHash = #"1e99fdb59bd91c1a85624104c0fcfae34d7fcb850dd17a0b75e7efe49857d15fdefc47dd0d86ca34cbc3a8b580839aea6341a573e4e60dc1ddcf7ecc32bf9cae";
self.paymentParamForPassing.expiryYear = #"2019";
self.paymentParamForPassing.expiryMonth = #"12";
self.paymentParamForPassing.nameOnCard = #“NOC”;//self.selectedCard.cardHolderName;
self.paymentParamForPassing.cardNumber = #"5123456789012346";//self.selectedCard.cardNumber;
self.paymentParamForPassing.CVV = #"123";//self.selectedCard.cvc;
//self.paymentParamForPassing.saveStoreCard = #"1";
self.paymentParamForPassing.storeCardName = #"My TestCard";
self.createRequest = [PayUCreateRequest new];
[self.createRequest createRequestWithPaymentParam:self.paymentParamForPassing forPaymentType:PAYMENT_PG_CCDC withCompletionBlock:^(NSMutableURLRequest *request, NSString *postParam, NSString *error) {
if (error == nil) {
UIStoryboard *stry = [UIStoryboard storyboardWithName:#"MainStoryboard" bundle:nil];
PayUMoneyViewController *PVC = (PayUMoneyViewController *)[stry instantiateViewControllerWithIdentifier:#"PVC"];
PVC.theRequest = request;
NSLog(#"TheRequest: %#", request);
[self.navigationController pushViewController:PVC animated:true];
}
else{
NSLog(#"URL request from createRequestWithPostParam: %#",request);
NSLog(#"PostParam from createRequestWithPostParam:%#",postParam);
NSLog(#"Error from createRequestWithPostParam:%#",error);
[[[UIAlertView alloc] initWithTitle:#"ERROR" message:error delegate:self cancelButtonTitle:#"OK" otherButtonTitles:nil, nil] show];
}
}];
Please let me know if anybody has integrated the PAYU IOS SDK seamless 3.2

NSDate. Convert time and GMT to string with time and zero GMT

The time is given as timestamp (in seconds). I need time only, so I take any date and add this time interval. For example:
NSDate *td = [NSDate dateWithTimeIntervalSince1970:interval];
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
dateFormatter.dateFormat = #"HH:mm";
dateFormatter.locale = #"en_GB";
NSString *result = [dateFormatter stringFromDate:d];
But it works incorrect: for 32400 it shows 12:00 (MSK) instead of 9:00.
How to solve this issue?
dateFormatter.timeZone = [NSTimeZone timeZoneForSecondsFromGMT:0];

Solution for Paypal Error 589023 in iphone application

This is the Resolution for Paypal (Sandbox) Error "589023" in iPhone Application
-(void)payWithPayPal{
for (int i=0;i
PayPal *payPal=[PayPal getPayPalInst];
payPal.shippingEnabled = FALSE;
payPal.dynamicAmountUpdateEnabled = NO;
payPal.feePayer = FEEPAYER_EACHRECEIVER;
PayPalPayment *payment = [[[PayPalPayment alloc] init] autorelease];
payment.recipient = #"UKMCA2010#GMAIL.COM";
payment.paymentCurrency = #"USD";
payment.description = #"Payment Discription here...";
SampleSingleton *sample=[SampleSingleton sharedInstance];
payment.merchantName =[sample getStrRestaurantName];
payment.invoiceData = [[[PayPalInvoiceData alloc] init] autorelease];
payment.invoiceData.invoiceItems = [NSMutableArray array];
PayPalInvoiceItem *item = [[PayPalInvoiceItem alloc] init];
item.totalPrice=[NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:#"%.2f", 126.34545]]; // If u give xxx.xx , no need to give the %.2f , u can give directly %f
item.name = objTempReceived.strItemName;
item.itemId = #"Item ID";
[payment.invoiceData.invoiceItems addObject:item];
[item release];
}
payment.subTotal = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:#"%.2f",126.34545]]; //Total and Subtotal must be equal
payment.invoiceData.totalTax = [NSDecimalNumber decimalNumberWithString:[NSString stringWithFormat:#"%.2f",3.34]];
NSLog(#"Total Tax is :%#",[payment.invoiceData.totalTax stringValue]);
[payPal checkoutWithPayment:payment];
}
Here the total and subtotal and Tax allows only two digits after the .(dot) Ex: (234.xx). So by using the %.2f to work perfectly.

Can someone show me how to display time + additional minutes in Objective C

Say the hour is 15:03.
Say variable minutesToAdd is 39
What's the code that will display 15:42 on a UILabel (current time + minutesToAdd)?
Here is some code, I dont check it in XCode (and its will not compiled just after copy/paste), but the idea is like I wrote below:
NSCalendar *calendar = [NSCalendar currentCalendar];
NSDateComponents *dc = [[[NSDateComponents alloc] init] autorelease];
dc.minute = 39;
NSDate *srcDate = NSDate(15:03); // Create date here
NSDate *resultDate = [calendar dateByAddingComponents:dc toDate:srcDate]; // Here is your new date

Resources