将cell.textLabel.text存储在NSString中

时间:2013-11-27 18:50:53

标签: ios iphone objective-c core-data uitableview

我认为这是一个简单的要求。我有一个表视图控制器,单元格通过核心数据信息填充。这样可行。我现在想要做的是从cellForRowAtIndexPath中的cell.textLabel.text中提取信息到一个字符串,我最终将用它来创建一个PDF。

为了正确看待这个问题,我有一个创建PDF的导航栏按钮:

- (IBAction)generatePDFbuttonPressed:(id)sender
{
    pageSize = CGSizeMake(612, 792);
    NSString *fileName = @"new.pdf";
    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString *documentsDirectory = [paths objectAtIndex:0];
    NSString *pdfFileName = [documentsDirectory stringByAppendingPathComponent:fileName];

    [self generatePdfWithFilePath:pdfFileName];
}

那叫:

- (void) generatePdfWithFilePath: (NSString *)thefilePath
{
    UIGraphicsBeginPDFContextToFile(thefilePath, CGRectZero, nil);
    BOOL done = NO;
    do
    {
        //Start a new page.
        UIGraphicsBeginPDFPageWithInfo(CGRectMake(0, 0, pageSize.width, pageSize.height), nil);

        //Draw text fo our header.
        [self drawHeader];

        //Draw some text for the page.
        [self drawText];

        //Draw an image
        [self drawImage];
        done = YES;
    }
    while (!done);

    // Close the PDF context and write the contents out.
    UIGraphicsEndPDFContext();
}

这会调用drawText方法:

- (void)drawText
{
    CGContextRef    currentContext = UIGraphicsGetCurrentContext();
    CGContextSetRGBFillColor(currentContext, 0.0, 0.0, 0.0, 1.0);

    NSString *textToDraw = @"Hello, this is a test";

    UIFont *font = [UIFont systemFontOfSize:14.0];

    CGSize textSize = CGSizeMake(pageSize.width - 5*kBorderInset-5*kMarginInset, pageSize.height - 5*kBorderInset - 5*kMarginInset);

    CGRect renderingRect = CGRectMake(kBorderInset + kMarginInset, kBorderInset + kMarginInset + 50.0, pageSize.width - 2*kBorderInset - 2*kMarginInset, textSize.height);

    [textToDraw drawWithRect:renderingRect options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];
}

这会抽出一个带有Hello字样的PDF,这是一个文本。非常好。但不是我想要的。

每个单元格都从Core Data中检索信息以填充textLabel和detailTextLabel。视图控制器标题和节名称也是通过fetchedResultsController实现的,该控制器对实体执行fetchRequest以检索该信息。这样可行。

我现在要做的是获取cell.textLabel.text值,将其放入一个字符串中并在drawText方法中使用它。

我在drawText方法中创建了一个fetchRequest:

 NSManagedObjectContext *managedObjectContext = [self managedObjectContext];

 NSFetchRequest *pdfFetchRequest = [[NSFetchRequest alloc] init];
 NSEntityDescription *entity = [NSEntityDescription entityForName:@"Transaction" inManagedObjectContext:managedObjectContext];
 pdfFetchRequest.entity = entity;

 NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"dates.dateOfEvent" ascending:NO];

 pdfFetchRequest.sortDescriptors = [NSArray arrayWithObject:sort];
 pdfFetchRequest.fetchBatchSize = 20;

 pdfFetchRequest.predicate = [NSPredicate predicateWithFormat:@"whoBy = %@", self.person];

 NSError *error = nil;
 NSArray *types = [managedObjectContext executeFetchRequest:pdfFetchRequest error:&error];

NSString *textToDraw = [NSString stringWithFormat:@"Information = %@", types];

如果我使用types数组创建一个字符串,它会显示PDF文件中的原始核心数据信息。这证明它正在发挥作用。但是,这不是人类可读的。

在cellForRow中,一个简单的NSLog(@“%@”,cell.textLabel.text)说明了日志中的正确信息。

我现在要做的是将该信息存储到字符串中,将其传递给drawText方法,并通过drawText方法中的NSString调用USE该字符串以显示PDF文件中的信息。

这让我发疯,我无法找到一个解决方案来实现我想要的目标;如果有人可以提供任何帮助,我将非常感激!

简而言之,基本上我想做的是:

检索WHATEVER存储在cell.textLabel.text和cell.detailTextLabel.text中,并将其保存为字符串,以便我可以从我的drawText方法调用它。

如果这不适用于PDF,我可以通过电子邮件发送表信息。我不知何故需要分享这个表视图中的任何内容(包括非可见单元格) - 无论是创建PDF,电子邮件还是任何其他机制。我在这里真的很亏!

谢谢!

1 个答案:

答案 0 :(得分:1)

获取请求的结果是一个托管对象数组,所以你只需拥有 迭代该数组并“绘制”所需信息。例如

NSArray *types = [managedObjectContext executeFetchRequest:pdfFetchRequest error:&error];
for (Transaction *trans in types) {
    NSString *name = trans.name; // Assuming that there is a "name" property
    NSString *otherProperty = trans.otherProperty; // just an example
    NSString *textToDraw = [NSString stringWithFormat:@"name = %@, other property = %@", name, otherProperty];
    // now draw it to the PDF context
}

所以你应该从“模型”中获取数据(在这种情况下是获取的结果控制器) 而不是从“视图”(表视图单元格)。