0

前回 Stackowerflow に投稿したときは、自分よりも多くのことを知っていると思っていたので失敗しました。メソッドの名前を変更して簡単にし、すべてを非常に混乱させました。ということで、今からもう1回挑戦してみます。

とにかく、私のアプリケーションは Apple によって数回拒否され、バグが見つかりません。シミュレーターと AD-HOC インストールを実行していますが、バグが見つからないか、再現することさえできないようです。

警告はなく、静的アナライザーを使用していますが、問題も見つかりません。

私はObjective Cを初めて使用し、クラスメソッドの使用方法に何か問題があると思いますが、よくわかりません。

クラッシュするのは最後のクラス メソッド「itemStatus」です。

ちなみにARCを使っています。

どんな助けでも大歓迎です。

   Exception Type:  EXC_BAD_ACCESS (SIGSEGV)
    Exception Codes: KERN_INVALID_ADDRESS at 0x432b2b10
    Crashed Thread:  0

    Thread 0 name:  Dispatch queue: com.apple.main-thread
    Thread 0 Crashed:
    0   libobjc.A.dylib                 0x3a3c3526 objc_retain + 6
    1   Kebunno                     0x0008928a +[DynamoDBManager itemStatus] + 418
    2   Kebunno                     0x000894de +[DynamoDBManager getItem:] + 170
    3   Kebunno                     0x000908f6 __44-[KebunnoViewController itemPressed]_block_invoke + 362

ファーストクラス

@interface KebunnoViewController ()

// Interface declarations here

@end


@implementation KebunnoViewController

- (IBAction)itemPressed:(id)sender {
    NSString *itemID = _itemID.text;
    NSString *reference = _reference.text;


    BOOL itemCorrect = NO;
    if([ItemHelpClass validItem:itemID]){
    itemCorrect = YES;
    }

    if(!itemCorrect){
        [[ItemHelpClass showItemNotCorrect:self] show];
        return;
    }


    else if(itemCorrect){
        [self startCancelTimer];
        [self disableButtons];

        dispatch_queue_t backgroundQueue = dispatch_queue_create("background queue", NULL);
        dispatch_async(backgroundQueue, ^{
            NSString *itemStatus;
            itemStatus = [DynamoDBManager getItem:itemID]; //crash

         if([itemStatus isEqualToString:NETWORK_ERROR] || 
          [itemStatus  isEqualToString:AMAZON_ERROR]){
                dispatch_async(dispatch_get_main_queue(), ^{
                    [self enableButtons];
                    [[ItemHelpClass showSomethingWentWrong:self] show];
                });
            }

//Code continues
}

@end

DynamoDBMangar.m という別のファイル

@implementation DynamoDBManager

+(NSString*)getItem:(NSString *)itemID {
    NetworkStatus netStatus = 
    [[Reachability reachabilityForInternetConnection]currentReachabilityStatus];

    if(netStatus == NotReachable)
    {
        return NETWORK_ERROR;
    }

    NSString *itemStatus = [self itemStatus]; //crash
    if([itemStatus isEqualToString: ITEM_BORROWED]){
        return ITEM_BORROWED;
    }
    else if([itemStatus isEqualToString:NETWORK_ERROR])
    {
        return NETWORK_ERROR;
    }

//Code continues
}



+(NSString*) itemStatus{
    NetworkStatus netStatus = [[Reachability reachabilityForInternetConnection]currentReachabilityStatus];
    if(netStatus == NotReachable)
    {
        return NETWORK_ERROR;
    }


    @try
    {

        DynamoDBGetItemRequest *request = [[DynamoDBGetItemRequest alloc] initWithTableName: TABLE_CONTENT andKey:[[DynamoDBKey alloc] initWithHashKeyElement:
                                                                   [[DynamoDBAttributeValue alloc] initWithS:[ItemHelpClass getItem]]]];

        DynamoDBGetItemResponse *response = [[AmazonClientManager ddb] getItem:request];
        if(response){
            if(((DynamoDBAttributeValue *)[response.item objectForKey:@"UID_ID"]).s){
                return ITEM_BORROWED;
            }
            else{
                return ITEM_NOT_BORROWED;
            }
        }

    }@catch (NSException *exception)
    {
        [AmazonClientManager wipeCredentialsOnAuthError:exception];
    }
    return NETWORK_ERROR;

}

@end

編集:CPUの状態

Thread 0 crashed with ARM Thread State (32-bit):
    r0: 0x200c55c0    r1: 0x432b2b00      r2: 0x00000002      r3: 0x00000020
    r4: 0x00000001    r5: 0x200a2d10      r6: 0x1f5c67f0      r7: 0x2fd95a08
    r8: 0x200a4260    r9: 0x000fc09c     r10: 0x1f5c4c40     r11: 0x200a44e0
    ip: 0x3c33c050    sp: 0x2fd95960      lr: 0x0008928f      pc: 0x3a3c3526
  cpsr: 0x00000030
4

1 に答える 1

-1
@catch (NSException *exception)
    {
        [AmazonClientManager wipeCredentialsOnAuthError:exception];
        return NULL;
    }
于 2013-03-21T15:33:55.893 に答える