0

件名が言うように、デバイス上でアプリケーションをデバッグ モードで問題なく実行できますが、テスト デバイス (アドホック ディストリビューション) で実行しようとすると、機能しないセクション (すべてではない) があります。

アプリケーションは、サーバーから json データをダウンロードし、解析されたデータ (テキスト、ビデオ、ecc) をユーザーに表示します。

サーバーと通信するために、アプリケーションのあらゆる場所で ASIFormDataRequest を使用しました。

何か案は?

ありがとう!

いくつかのコード:

NSMutableString *url = [[NSMutableString alloc] initWithString:@"http://url"];
NSURL *urlElaborazioneDati = [NSURL URLWithString:url];

__weak __block ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:urlElaborazioneDati]; 
[request setCompletionBlock:^{
    __weak NSString *jsonData = [request responseString];
    NSArray *jsonArray = [jsonData JSONValue];scrollView = [[UIScrollView alloc] init];
    scrollView.frame = CGRectMake(0.0, 70.0, 320.0, 312.0);
    scrollView.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];

    scrollView.contentSize = CGSizeMake(320.0,marginTop*[jsonArray count]);
    [self.listaVideo addSubview:scrollView];

    for (int i=0; i<[jsonArray count]; i++) {
NSString *key = [NSString stringWithFormat:@"%d",i];
        NSArray *elemento = [jsonArray valueForKey:key];

        UIView *item = [[UIView alloc] initWithFrame:CGRectMake(148.0, (marginTop*i), 162.0, 67.0)];
        item.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
        [scrollView addSubview:item];

        UILabel *titoloVideo = [[UILabel alloc] initWithFrame:CGRectMake(0, 0, 162, 20)];
        titoloVideo.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
        titoloVideo.textColor = [UIColor whiteColor];
        titoloVideo.font = [UIFont boldSystemFontOfSize:17];
        [titoloVideo setText:[elemento valueForKey:@"titolo"]];
        [item addSubview:titoloVideo];

        UITextView *testoVideo = [[UITextView alloc] initWithFrame:CGRectMake(0, 30, 162, 37)];
        testoVideo.backgroundColor = [UIColor colorWithRed:1 green:0.5 blue:0 alpha:0];
        testoVideo.textColor = [UIColor whiteColor];
        testoVideo.font = [UIFont boldSystemFontOfSize:13];
        testoVideo.textAlignment = UITextAlignmentLeft;
        testoVideo.editable = NO;
        [testoVideo setContentInset:UIEdgeInsetsMake(-10, -7, 0, 0)];
        [testoVideo setText:[elemento valueForKey:@"testo"]];
        [item addSubview:testoVideo];

        [self embedYouTube:[elemento valueForKey:@"url"] frame:CGRectMake(10, (marginTop*i), 128, 67)];
}

}];
[request setFailedBlock:^{
    NSError *responseerror = [request error];

    NSString *responseerrorstring = [NSString stringWithFormat:@"%@",responseerror];

    UIAlertView *error = [[UIAlertView alloc] initWithTitle: @"Errore connessione"
                                       message: responseerrorstring
                                      delegate: self
                             cancelButtonTitle: @"Ok"
                             otherButtonTitles: nil];
    [error setTag:1];
    [error show];
}];

次に、embedYouTube で:

- (void)embedYouTube:(NSString *)urlString frame:(CGRect)frame {

NSString *embedHTML = @"\
<html><head>\
<meta name = \"viewport\" content = \"initial-scale = 1.0, user-scalable = no, width = %0.0f\"/></head>\
<body style=\"background:#fff;margin-top:0px;margin-left:0px\">\
<div><object width=\"%0.0f\" height=\"%0.0f\">\
<param name=\"movie\" value=\"%@\"></param>\
<embed src=\"%@\"\
type=\"application/x-shockwave-flash\" wmode=\"transparent\" width=\"%0.0f\" height=\"%0.0f\"></embed>\
</object></div></body></html>";

NSString *html = [NSString stringWithFormat:embedHTML, frame.size.width, frame.size.width, frame.size.height, urlString, urlString, frame.size.width, frame.size.height];
//NSLog(@"%0.0f, %0.0f, %@",frame.size.width, frame.size.height, html);
UIWebView *videoView = [[UIWebView alloc] initWithFrame:frame];
[videoView loadHTMLString:html baseURL:nil];
[scrollView addSubview:videoView];

}

これは、アドホック配布で機能していないように見えるセクションの 1 つです...


これが同じ状況で誰かを助けることができるなら、ここにApple Developer Technical Supportの答えがあります:

アドホック ビルドを作成する場合、デフォルトでは、Xcode はプロジェクトのコンパイル時にさらに最適化を適用します。詳細については、https://developer.apple.com/library/ios/qa/qa1764/を参照してください。

最適化によってコードのバグが明らかになることは、それほど珍しいことではありません。通常、これは未定義の動作です (たとえば、文字列を保持するには小さすぎるバッファーに文字列をコピーするなどしてメモリを踏みにじるなど)、コードが誤って機能する前に問題が発生します。または、ARC がオブジェクトを早期に解放することに積極的であるため、__unsafe_unretained クラッシュが発生したり、__​​weak オブジェクトが早期に消失したりする可能性があります。

完了ブロックが呼び出されたかどうか知っていますか? NSLog(@"%s:%d", func , LINE );を追加すると、あなたのコードでは、あなたが期待するメソッドが呼び出されていますか?

ダウンロードが開始されたかどうかわかりますか?要求オブジェクトは、予想よりも早く割り当て解除されましたか?

何がうまくいかないのかを理解するには、何がうまくいかないのかを正確に突き止める必要があります。

iTunes 経由で IPA をインストールしたときにのみ問題が再現する場合は、NSLog() を使用してプログラム フローをトレースし、変数の実際の値を調べて、期待どおりに動作していないものを確認する必要があります。詳細については、「デプロイされた iOS アプリのデバッグ」http://developer.apple.com/library/ios/qa/qa1747/を参照してください。

また、リリース ビルドを作成するときと同じようにデバッグ ビルドを作成するときに、ビルド設定を変更して同じ最適化 (通常は「最速、最小 -O」) を使用することもできます。この方法でデバッガを使用できますが、最適化によって多少信頼性が低下することに注意してください。疑わしい場合は、NSLog() に頼ってください。

よろしくお願いします、

...

4

0 に答える 0