3

私のアプリは本当にシンプルです。htmlファイルのファイル名を持つplistがいくつかあります。ユーザーが行を選択すると、webviewはそのhtmlファイルとそのコンテンツをロードします。アプリのアップデートにアプローチする方法に興味がありますか?例:アプリのボタンをクリックしてユーザーにダウンロードしてもらいたい、修正された新しい更新されたhtmlファイルがあります。古いファイル(html)を新しいものに置き換えてほしい。これを行う方法はありますか?どこから始めればよいかわからないので、誰かが私を正しい方向に向けてくれることを願っています。plistを更新する方法がないと仮定すると、plistからデータベースに切り替える必要がありますが、それでも問題は残ります。アプリに新しいファイルをダウンロードして古いファイルを置き換えるにはどうすればよいですか?

ありがとうございました

もう少し詳しく説明します。

私は私のアプリ内で更新を達成するための正しい方法を見つけようとしていると思います。私のhtmlファイルはアプリ内にあります。アプリが最初にインターネットに接続して最新のコンテンツファイル(html、plists)をダウンロードし、それらをドキュメントフォルダーに配置してから、ホーム画面のplistファイルを更新する可能性があると想定していますか?これは正しい思考の流れですか?

アプリをインターネットのみにしたくないので、それらのhtmlファイルをオフラインで利用できるようにする必要があります。

4

4 に答える 4

0

HTMLファイルを外部サーバーに保存できます。また、アプリに変更を加えて、アプリバンドルからではなく外部サーバーからHTMLファイルをロードします。したがって、HTMLファイルのコンテンツを更新する必要がある場合は、サーバーで更新できます。

于 2012-06-21T03:27:43.213 に答える
0

新しい html ファイル名を取得できる場合は、それを plist ファイルに直接書き込むことができます。

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
    NSUserDomainMask, YES);
NSString *docPath = [[paths objectAtIndex:0] stringByAppendingPathComponent:@"settings.plist"];
NSMutableDictionary* newValueDict=[[NSMutableDictionary alloc]initWithContentsOfFile:docPath];
[newValueDict setObject:newHtmlPageValue forKey:@"myHtmlPage"];
[newValueDict writeToFile:docPath atomically:NO];
[newValueDict release];
于 2012-06-21T03:36:57.063 に答える
0

多くの人が示唆したように、私の計画は、Web からコンテンツをダウンロードし、ライブラリ フォルダーに保存して、そこからコンテンツを読み込むことだと考えました。アプリ内には、ユーザーが選択するたびにサーバーに接続してコンテンツを更新する更新ボタンがあります。apple.com でサンプル コードを見つけました ( https://developer.apple.com/library/ios/#documentation/Cocoa/Conceptual/URLLoadingSystem/Tasks/UsingNSURLConnection.html )

少し微調整すれば問題なく動作するはずです。これは、複数のファイルをダウンロードしようとする場合にも役立つ可能性があります。iPhone アプリで複数のファイルをダウンロードする (目的 c)

- (IBAction)down
{
    // Create the request.
    NSURLRequest *theRequest=[NSURLRequest requestWithURL:[NSURL URLWithString:@"http://abc.com/missing.html"]
                                              cachePolicy:NSURLRequestUseProtocolCachePolicy
                                          timeoutInterval:60.0];
    // create the connection with the request
    // and start loading the data
    NSURLConnection *theConnection=[[NSURLConnection alloc] initWithRequest:theRequest delegate:self];
    NSString *msg;
    if (theConnection) {
        // Create the NSMutableData to hold the received data.
        // receivedData is an instance variable declared elsewhere.
        receivedData = [[NSMutableData data] retain];



    } else {
        // Inform the user that the connection failed.


    }

}


- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
    // This method is called when the server has determined that it
    // has enough information to create the NSURLResponse.

    // It can be called multiple times, for example in the case of a
    // redirect, so each time we reset the data.


    // receivedData is an instance variable declared elsewhere.
    [receivedData setLength:0];
}

- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data
{
    // Append the new data to receivedData.
    //You can also use the connection:didReceiveData: method to provide an indication of the connection’s progress to the user.
    // receivedData is an instance variable declared elsewhere.

    NSString *msg = [NSString stringWithFormat:@"data %@",data,nil ];
    UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"-download-" 
                                                    message:msg
                                                   delegate:nil 
                                          cancelButtonTitle:@"OK" 
                                          otherButtonTitles: nil];
    [alert show];
    [alert release];
   //NSLog ([[NSString alloc] initWithFormat:@"The value: %d  object: %@\n", alphArray.count, [alphArray objectAtIndex:1.1],nil]);

    NSString *string = [[NSString alloc] initWithData:data encoding:NSASCIIStringEncoding];
    NSLog(@"the data %@",string);

    NSString *libraryPath = [NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) objectAtIndex:0];
    NSString *filePath = [libraryPath stringByAppendingPathComponent:@"Missing.html"];

    NSLog(@"Full path: %@", filePath);

    //NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);


    //write data to files
    [data writeToFile:filePath atomically:YES];

    [receivedData appendData:data];
}

- (void)connection:(NSURLConnection *)connection
  didFailWithError:(NSError *)error
{
    // release the connection, and the data object
    [connection release];
    // receivedData is declared as a method instance elsewhere
    [receivedData release];

    // inform the user
    NSLog(@"Connection failed! Error - %@ %@",
          [error localizedDescription],
          [[error userInfo] objectForKey:NSURLErrorFailingURLStringErrorKey]);
}

- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
    // do something with the data
    // receivedData is declared as a method instance elsewhere
    NSLog(@"Succeeded! Received %d bytes of data",[receivedData length]);

    // release the connection, and the data object
    [connection release];
    [receivedData release];
}

-(NSCachedURLResponse *)connection:(NSURLConnection *)connection
                 willCacheResponse:(NSCachedURLResponse *)cachedResponse
{
    NSCachedURLResponse *newCachedResponse = cachedResponse;

    if ([[[[cachedResponse response] URL] scheme] isEqual:@"https"]) {
        newCachedResponse = nil;
    } else {
        NSDictionary *newUserInfo;
        newUserInfo = [NSDictionary dictionaryWithObject:[NSDate date]
                                                  forKey:@"Cached Date"];
        newCachedResponse = [[[NSCachedURLResponse alloc]
                              initWithResponse:[cachedResponse response]
                              data:[cachedResponse data]
                              userInfo:newUserInfo
                              storagePolicy:[cachedResponse storagePolicy]]
                             autorelease];
         NSLog(@"Succeeded! Receive use:%@",newUserInfo);
    }
    NSLog(@"Succeeded! Received %@ - use:%@",newCachedResponse);
    return newCachedResponse;
}
于 2012-06-22T23:13:54.253 に答える
0

The answer is exactly what you described.

My most common train is to check for the existence in documents, add them from the bundle if they are not there.

use them, and download new ones in the background. (if the internet is available). replace the old ones with the new ones in the event a successful download happens.

And set a timeout of some type so you dont download a new one every second.

I like a day for my timeout.

and implement a way to check the version with the server. (MD5 Hash and filesize is a good not to mention small comparison)

Good luck

于 2012-06-22T23:28:11.937 に答える