2

私は人々がコンテンツをダウンロードしてオフラインでアクセスできるアプリを作成しています。それはカタログが好きです。しかし、AppleはそれをiCloudで焼き付けているため拒否しました i 私は次のことをしていますが、うまくいかないようです。

Funciones.m

+ (BOOL)addSkipBackupAttributeToItemAtURL:(NSURL *)URL {
    const char* filePath = [[URL path] fileSystemRepresentation];

    const char* attrName = "com.apple.MobileBackup";
    u_int8_t attrValue = 1;

    int result = setxattr(filePath, attrName, &attrValue, sizeof(attrValue), 0, 0);

    return result == 0;
}

Update.m

- (void)updateImg:(NSString *)tipo {

    //tomamos el ultimo update
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    NSTimeInterval time = [defaults doubleForKey:@"lastUpdate"];
    NSLog(@"%f", time);

    CatalogoAppDelegate *app = [[UIApplication sharedApplication] delegate];

    NSString *post = [NSString stringWithFormat:@"lastUpdate=%f", time];
    NSData *postData = [post dataUsingEncoding:NSISOLatin1StringEncoding allowLossyConversion:NO];
    NSMutableURLRequest *urlRequest = [[[NSMutableURLRequest alloc] init] autorelease];
    NSString *url = [NSString stringWithFormat:@"%@iPhone/update%@Img.php", app.serverUrl, tipo];
    [urlRequest setURL:[NSURL URLWithString:url]];
    [urlRequest setHTTPMethod:@"POST"]; 
    [urlRequest setHTTPBody:postData];

    NSData *urlData; 
    NSURLResponse *response; 
    NSError *error;
    urlData = [NSURLConnection sendSynchronousRequest:urlRequest returningResponse:&response error:&error]; 
    if(urlData) {


        NSString *aStr = [[[NSString alloc] initWithData:urlData encoding:NSUTF8StringEncoding]autorelease];
        //NSLog(@"%@: %@", tipo, aStr);
        NSArray *temp = [aStr componentsSeparatedByString:@";"];

        //Direccionl Local de la APP
        NSString *docDir = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

        for (int i=0; i<[temp count]; i++) {

            NSString *tempImg = [NSString stringWithFormat:@"%@", [temp objectAtIndex:i]];
            //NSLog(@"%@", tempImg);

            //pedimos cada url
            NSURL *tempURL = [NSURL URLWithString:[NSString stringWithFormat:@"%@images/%@/%@", app.serverUrl, tipo, tempImg]];
            //[Funciones addSkipBackupAttributeToItemAtURL:tempURL];
            UIImage *image = [[UIImage alloc] initWithData:[NSData dataWithContentsOfURL:tempURL]];
            NSLog(@"%@images/%@/%@", app.serverUrl, tipo, tempImg);
            NSString *pngFilePath = [NSString stringWithFormat:@"%@/%@", docDir, tempImg];
            NSData *data1 = [NSData dataWithData:UIImagePNGRepresentation(image)];
            [data1 writeToFile:pngFilePath atomically:YES];

            NSURL *backUrl = [NSURL fileURLWithPath:pngFilePath];
            [Funciones addSkipBackupAttributeToItemAtURL:backUrl];

        }

    }
    [self performSelectorInBackground:@selector(finUpdate) withObject:nil];
}

私が間違っていることは何ですか?

ありがとう

4

2 に答える 2

2

setxattrは成功またはエラーを示す結果を提供し、Apple のaddSkipBackupAttributeToItemAtURL:メソッドはエラーをチェックして、この情報をコードに返します。あなたのコードは単にそれを無視します。エラーを返すかどうかを判断することから始めます。

于 2012-05-21T23:38:16.900 に答える
0

アプリが iOS 5.0 と互換性があるためかもしれません。変数をバックアップしないは、5.1 以降でのみ使用できます。詳細はこちらhttp://developer.apple.com/library/ios/#qa/qa1719/_index.html#//apple_ref/doc/uid/DTS40011342

于 2012-08-07T16:47:32.200 に答える