0

私はiOS開発にまったく慣れていません。私のアプリはネットワーク経由でファイルを取得し、それを image.png として書き込み、後で画像を読み取って表示します。ただし、UIImage オブジェクトが常に nil に設定されているため (iOS シミュレーター上)、表示部分が機能しません。stackoverflow から他の回答を実装しようとしましたが、うまくいきません。

ファイルを保存するための私のコードは次のとおりです。

    //inside utility class for model
    NSFileHandle * handle = nil;

    //For first packet of new file request
    if(CountFileParts == 1)
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"image.png"];
        NSLog(@"%@",appFile);
        handle = [NSFileHandle fileHandleForWritingAtPath:appFile];
        if(handle == nil)
        {
            [[NSFileManager defaultManager] createFileAtPath:appFile contents:nil attributes:nil];
            handle = [NSFileHandle fileHandleForWritingAtPath:appFile];
        }
    }
    //For other incoming packets of the same request
    else
    {
        NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documentsDirectory = [paths objectAtIndex:0];
        NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"image.png"];
        //NSLog(@"%@",appFile);

        handle = [NSFileHandle fileHandleForUpdatingAtPath:appFile];
        [handle seekToEndOfFile];
        //NSLog(@"Writing continue in new file");

    }
    if(handle == nil)
        NSLog(@"handle nil");
    NSData * data = [str dataUsingEncoding:NSUTF8StringEncoding];
    [handle writeData:data];
    [handle closeFile];

    if(index != -1 && index!= NSNotFound)
    {
        NSLog(@"Inside Bool");
        self.isPlotReady = YES;//kvo in view-controller as shown below
        self.isPlotReady = NO;
    }

画像ファイルをロードするコードは次のとおりです。

-(void) observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary  *)change context:(void *)context

{
    if([keyPath isEqualToString:@"isPlotReady"])
    {
        self.isReady = [[change objectForKey:NSKeyValueChangeNewKey] boolValue];
        [self updateUI];
    }
}
-(void) updateUI
{
    if(self.isReady)
    {
       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
       NSString *documentsDirectory = [paths objectAtIndex:0];
       [self lsOwnDirectory:documentsDirectory];
       NSString *appFile = [documentsDirectory stringByAppendingPathComponent:@"image.png"];
       //NSLog(@"%@",appFile);
       UIImage *img = [UIImage imageWithContentsOfFile:appFile];

       if(img == nil)
          NSLog(@"Couldn't find image");
       else
       {
          UIImageView *imageView = [[UIImageView alloc] initWithImage:img] ;
          [self.view addSubview:imageView];
       }
   }
}
//Prints Directory contents of input directory
- (void) lsOwnDirectory:(NSString *) currentpath {
    NSError * error = [[NSError alloc] init];
    NSFileManager *filemgr;

    filemgr = [[NSFileManager alloc] init];

    //currentpath = [filemgr currentDirectoryPath];
    NSLog(@"Current Directory Path : %@",currentpath);
    NSArray * files = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:currentpath error: &error];

    for(NSString * file in files){
      NSLog(@"%@", file);
    }
}

ifステートメントに対応する「イメージが見つかりませんでした」というメッセージが常に出力されますが、ファイルがまだそこにあることがわかりました(lsOwnDirectoryはディレクトリの内容を出力します)。多分私はここで何か基本的な間違ったことをしています。前もって感謝します。

4

0 に答える 0