Это сорта 'срочные', так как мое приложение только что заработало сегодня.
Мое приложение отлично работает в эмуляторе, прекрасно, когда я копирую его на телефон, iPad и другие айфоны. Мы проверили черт из приложения. Я отправил его в магазин приложений, и теперь он одобрен и работает, но ошибка возникает только в загруженном приложении.
По сути, я перебалансировал счет, используя NSDecimal и числовые форматеры. В эмуляторе и телефоне при шаге по коду все хорошо. Но парик из магазина приложений вышел. Похоже, что данные, которые я добавляю и вычитаю, не инициализируются.
Кто-нибудь когда-нибудь видел что-нибудь подобное?
Я знаю, что этот пост совершенно расплывчатый, но пытаюсь выяснить, с чего начать отладку, если код в эмуляторе работает нормально.
- ОБНОВЛЕНИЕ-- добавление кода
-(void)balanceBill:(UITextField*)textField
{
//save the text field data
int row = [textField tag] - 900;
NSString *enteredSplitAmount = [formatter stringWithNoCurrency:[textField text]];
[theGuestTotals replaceObjectAtIndex:row withObject:enteredSplitAmount];
//Get data object
BillDataObject* data = [self theAppDataObject];
int changedSplitBy = 0;
UITableViewCell *cell;
UITextField *cellTextField;
double adjustedBill = 0.0;
NSString *guestAmountFromArray;
//NSString *guestAmountAdjusted;
//Figure out how many guests did NOT have their bill changed & get new bill total
for (NSUInteger i=0; i < [theGuestTotals count]; i++)
{
guestAmountFromArray = [theGuestTotals objectAtIndex:i];
if ([guestAmountFromArray isEqualToString:data.splitByAmountChanged])
{
changedSplitBy++;
}
//Adding ALL guest amounts to get a NEW Bill Total
adjustedBill += [guestAmountFromArray doubleValue];
}
if (changedSplitBy == 0)
changedSplitBy = 1;
//Convert newBill to decimal
NSDecimalNumber *adjustedBillTotal = [[NSDecimalNumber alloc] initWithDouble:adjustedBill];
NSDecimalNumber *originalBillTotal = [[NSDecimalNumber alloc] initWithString:data.totalBill];
NSDecimalNumber *splitBy = [[NSDecimalNumber alloc] initWithInt:changedSplitBy];
NSDecimalNumber *updatedGuestAmount;
//Figure out the the difference is between the new amount and the old amount
NSDecimalNumber *adjustedBillTotalDifference = [originalBillTotal decimalNumberBySubtracting:adjustedBillTotal];
//figure out the difference each guest who did not have their bill changed difference
NSDecimalNumber *guestSplitAmountDifference = [adjustedBillTotalDifference decimalNumberByDividingBy:splitBy];
//loop through array of guest totals to see if a guest total if different from the original split amout
for (NSUInteger i=0; i < [theGuestTotals count]; i++)
{
guestAmountFromArray = [theGuestTotals objectAtIndex:i];
if ([guestAmountFromArray isEqualToString:data.splitByAmountChanged])
{
NSDecimalNumber *guestAmount = [[NSDecimalNumber alloc] initWithString:[theGuestTotals objectAtIndex:i]];
NSIndexPath *indexPath = [NSIndexPath indexPathForRow:i inSection:0];
cell = [tableView cellForRowAtIndexPath:indexPath];
cellTextField = (UITextField*)[cell viewWithTag:i+900];
//add the split amount to the guest amount
updatedGuestAmount = [guestAmount decimalNumberByAdding:guestSplitAmountDifference];
//update the textfield with UPDATED amount
cellTextField.text = [formatter stringWithNumberStyle:NSNumberFormatterCurrencyStyle numberToFormat:updatedGuestAmount];
//replace the guest amount in the array with the UPDATED amount
[theGuestTotals replaceObjectAtIndex:i withObject:[formatter stringWithNumberStyle:NSNumberFormatterDecimalStyle numberToFormat:updatedGuestAmount]];
} else {
//Not equal so just update the amount from what it was...
//this might not be needed but I need to format if it is...
cellTextField.text = [formatter stringWithNumberStyle:NSNumberFormatterCurrencyStyle numberToFormat: [NSDecimalNumber decimalNumberWithString:guestAmountFromArray]];
}
}
//Now all guests who were not edited GOT updated now save that update for the next time this function is run
data.splitByAmountChanged = [formatter stringWithNumberStyle:NSNumberFormatterDecimalStyle numberToFormat:updatedGuestAmount];
//Clear out adjustedBill to get NEW totals after we updated each guest in the loop above
adjustedBill = 0;
//Lets see if we are over or under and do the 'REDISTRIBUTE'
for (NSUInteger i=0; i < [theGuestTotals count]; i++)
{
adjustedBill += [[theGuestTotals objectAtIndex:i] doubleValue];
}
adjustedBillTotal = [[NSDecimalNumber alloc] initWithDouble:adjustedBill];
if ([originalBillTotal compare:adjustedBillTotal] == NSOrderedAscending)
{
[warningImage setHidden:NO];
NSDecimalNumber *overage = [adjustedBillTotal decimalNumberBySubtracting:originalBillTotal];
[overUnderLabel setText:[NSString stringWithFormat:@"%@ over",[formatter stringWithNumberStyle:NSNumberFormatterCurrencyStyle numberToFormat:overage]]];
// [self disableDone];
[self enableRedistribute];
}
else if ([originalBillTotal compare:adjustedBillTotal] == NSOrderedDescending)
{
[warningImage setHidden:NO];
NSDecimalNumber *underage = [originalBillTotal decimalNumberBySubtracting:adjustedBillTotal];
[overUnderLabel setText:[NSString stringWithFormat:@"%@ under",[formatter stringWithNumberStyle:NSNumberFormatterCurrencyStyle numberToFormat:underage]]];
// [self disableDone];
[self enableRedistribute];
}
else
{
[warningImage setHidden:YES];
overUnderLabel.text = @"";
//[self enableDone];
[self disableRedistribute];
}
}