3

更新#1:これがiPadアプリで実行されていることを忘れていました

これは私の修正したコードです (まだ動作していませんが、不要なコードを削除しました):

    NSURL *tmpDirURL = [NSURL fileURLWithPath:NSTemporaryDirectory() isDirectory:YES];
NSURL *fileURL = [[tmpDirURL URLByAppendingPathComponent:@"custImage"] URLByAppendingPathExtension:@"png"];

NSError*writeError = nil;
[client.aClientImage writeToURL:fileURL options:0 error:&writeError];
NSAssert(writeError==nil, writeError);

//  write appointment info
NSString *htmlString;
if(client.aClientEMail.length > 0)  {
    htmlString = [NSString stringWithFormat:NSLocalizedString(@"HTML_STRING1",nil),
                  client.aClientFirstName,
                  client.aClientLastName,
                  client.aClientEMail.length == 0? @"": client.aClientEMail,
                  client.aClientPrimaryPhone,
                  apptSelected.aServices,
                  fileURL];
}
else  {
    htmlString = [NSString stringWithFormat:NSLocalizedString(@"HTML_STRING2",nil),
                  client.aClientFirstName,
                  client.aClientLastName,
                  client.aClientPrimaryPhone,
                  apptSelected.aServices,
                  fileURL];
}

XCode デバッガーでcustImageを見ると、前のイメージとは異なるイメージが表示されますが、これは正しいものです。しかし、 fileURL で画像を表示する時間が来ると、それはcustImageとはまったく異なる画像であり、最初に表示されたのと同じ画像です!

更新 #2: fileURL に正しいイメージがあることがわかりましたが、2 回目はデバイスに書き込まれていません (最初のイメージは置き換えられていません)。

更新 #3:これは、UIWebView ポップオーバーに表示される htmlString の内容です。

<html><head><style type="text/css"> body {font-family: "Verdana"; font-size: 12;} </style></head><body>  
<h2>Rolf Marsh</h2><p>phone: 213-555-1234<p>services: Art, Decals<p><img src="file:///private/var/mobile/Applications/FEE7159E-1FF8-4B94-A446-2A4C72E0AD41/tmp/custImage.png"/></body></html>

これを修正する方法について何か提案はありますか?

4

2 に答える 2

0

私はそれを理解しました...同じ問題を抱えている他の人のために、これが機能するコードです。Core Data エンティティに既に画像があるため、一時ファイルに保存しないことに注意してください。コードは次のとおりです。

-(void) showExistingAppointmentDetails: (AppointmentInfo *) apptSelected  {

//  make rectangle to attach popover
CGRect rectangle = CGRectMake( [apptSelected.aPosX floatValue], [apptSelected.aPosY floatValue],
                              [apptSelected.aPosW floatValue], [apptSelected.aPosH floatValue]);

//  see if this is for staff; if so, don't display anything
if([apptSelected.aApptKey isEqual: @"Staff"])
    return;

NSPredicate *predicate =  ([NSPredicate predicateWithFormat: @"aClientKey == %@", apptSelected.aApptKey ]);  //  was aApptKey
ClientInfo *client = [ClientInfo MR_findFirstWithPredicate:predicate inContext:localContext];

UIImage *image = [UIImage imageWithData:client.aClientImage];  //  image is good  <---------

//  write appointment info into html string
NSString *htmlString;
if(client.aClientEMail.length > 0)  {
    htmlString = [NSString stringWithFormat:NSLocalizedString(@"HTML_STRING1",nil),
                  client.aClientFirstName,
                  client.aClientLastName,
                  client.aClientEMail.length == 0? @"": client.aClientEMail,
                  client.aClientPrimaryPhone,
                  apptSelected.aServices,
                  [self htmlForPNGImage:image]];
}
else  {
    htmlString = [NSString stringWithFormat:NSLocalizedString(@"HTML_STRING2",nil),
                  client.aClientFirstName,
                  client.aClientLastName,
                  client.aClientPrimaryPhone,
                  apptSelected.aServices,
                  [self htmlForPNGImage:image]];

}

UIViewController* popoverContent = [[UIViewController alloc] init];
UIView* popoverView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 250, 300)];
popoverView.backgroundColor = [UIColor colorWithWhite:(CGFloat)1.0 alpha:(CGFloat)1.0];  //  frame color?
popoverContent.view = popoverView;

//resize the popover view shown in the current view to the view's size
popoverContent.contentSizeForViewInPopover = CGSizeMake(250, 300);

//  add the UIWebView for RichText
UIWebView *webView = [[UIWebView alloc] initWithFrame:popoverView.frame];
webView.backgroundColor = [UIColor whiteColor];  //  change background color here

//  add the webView to the popover
[webView loadHTMLString:htmlString baseURL:[NSURL URLWithString:nil]];
[popoverView addSubview:webView];

//  if previous popoverController is still visible... dismiss it
if ([popoverController isPopoverVisible]) {
    [popoverController dismissPopoverAnimated:YES];
}

//create a popover controller
popoverController = [[UIPopoverController alloc] initWithContentViewController:popoverContent];
[popoverController presentPopoverFromRect:rectangle inView:self
                 permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

}


- (NSString *) htmlForPNGImage:(UIImage *) image {

NSData *imageData = UIImagePNGRepresentation(image);
NSString *imageSource = [NSString stringWithFormat:@"data:image/png;base64,%@",[imageData base64Encoding]];
return [NSString stringWithFormat:@"%@", imageSource];

}
于 2013-10-28T21:35:15.347 に答える