Попытка добавить строку в другую строку из NSTextField для печати в файле PDF

У меня есть метод, который сохраняет данные клиента, введенные в форму, которая вызывает метод createPDFFile. У меня есть созданный файл PDF, и в настоящее время у меня есть несколько строк-заполнителей, чтобы я мог разложить файл PDF, и теперь я хочу взять stringValue из NSTextField и затем добавить его в строку, содержащую плитку для ex: @"Имя:" добавляет строку-значение из NSTextField. Я могу заставить работать первый элемент, так как изменил IBOutput для сохранения, и это сработало для первого элемента, но не для второго и так далее. Я получаю ошибку BAD_AXCESS, но только после завершения метода.

Вот начало метода рисования PDF:

 -(void)drawPDFCustomerInfoWithContext:(CGContextRef)currentContext andWithPageSize:(CGSize)pageSize andCustomerObject:(Customer *)currentCustomer{
CTFontRef font = CTFontCreateWithName(CFSTR("Arial"), 12, NULL);
CFRange currentRange = CFRangeMake(0, 0);
CGContextSetTextMatrix(currentContext, CGAffineTransformIdentity);

NSString *customerName = [[[@"Name: " stringByAppendingString:self.firstNameTextField.stringValue] stringByAppendingString:@" "] stringByAppendingString:self.lastNameTextField.stringValue];
NSString *customerAddress = @"Address: ";
NSString *customerCity = @"City: ";
NSString *customerState = @"State: ";
NSString *customerZipcode = @"Zipcode: ";
NSString *customerPhone = @"Phone: ";
NSString *customerEmail = @"Email: ";

CFStringRef customerNameStringRef = (__bridge CFStringRef)customerName;
CFStringRef customerAddressStringRef = (__bridge CFStringRef)customerAddress;
CFStringRef customerCityStringRef = (__bridge CFStringRef)customerCity;
CFStringRef customerStateStringRef = (__bridge CFStringRef)customerState;
CFStringRef customerZipCodeStringRef = (__bridge CFStringRef)customerZipcode;
CFStringRef customerPhoneStringRef = (__bridge CFStringRef)customerPhone;
CFStringRef customerEmailStringRef = (__bridge CFStringRef)customerEmail;

Вот метод сохранения:

 - (IBAction)sendEstimateToCustomer:(id)sender {
float tempFloat = [[self.estimateNumberLabel stringValue]floatValue];
self.customerDataArray = [[NSMutableArray alloc]initWithArray:[self createCustomerDataArrayWithFirstName:self.firstNameTextField.stringValue andLastName:self.lastNameTextField.stringValue andAddress:self.customerAddress.stringValue andCity:self.customerCity.stringValue andState:self.customersState.stringValue andZipCode:self.customerZipcode.stringValue andPhone:self.customerPhone.stringValue andEmail:self.customerEmail.stringValue andEstimateNumber:tempFloat]];

self.customer = [[Customer alloc]initWithCustomerDataArray:self.customerDataArray];




[self createEstimatePDF];

Вот метод createEstimatePDF

 -(void)createEstimatePDF{
NSLog(@"create Estimate Method Fired");


CGContextRef pdfContext;
CFURLRef url;
url = [self createPDFPath];

CFMutableDictionaryRef myDictionary = NULL;
myDictionary = CFDictionaryCreateMutable(NULL, 0, &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks);
CFDictionarySetValue(myDictionary, kCGPDFContextTitle, CFSTR("My PDF File"));
CFDictionarySetValue(myDictionary, kCGPDFContextCreator, CFSTR("Ben"));
pdfContext = CGPDFContextCreateWithURL(url,NULL, myDictionary);

CFRelease(url);

CGPDFContextBeginPage(pdfContext,myDictionary);
CGSize pageSize = CGSizeMake(612, 792);



[self drawPDFJobDescriptionTableWithContext:pdfContext andWithPageSize:pageSize];
[self drawPDFContractualTextWithContext:pdfContext andPageSize:pageSize];
[self drawPDFCustomerInfoWithContext:pdfContext andWithPageSize:pageSize andCustomerObject:self.customer];
[self drawPDFEstimateNumberWithContext:pdfContext andWithPageSize:pageSize];
[self drawPDFJobTableHeadersWithContext:pdfContext andPageSize:pageSize];
[self drawPDFBorderWithContext:pdfContext andWithPageSize:pageSize];
[self drawPDFHeaderWithContext:pdfContext andWithPageSize:pageSize];
[self drawPDFLegalStatementWith:pdfContext andPageSize:pageSize];
[self drawPDFSignatureAndDateWith:pdfContext andPageSize:pageSize];
[self drawPDFSignLinesWithContext:pdfContext andPageSize:pageSize];

CFRelease(myDictionary);


CGPDFContextEndPage(pdfContext);

Я думаю, что что-то выходит, но я не могу узнать, где. Я посмотрел на переменные и прошел через них, и они показывают значение на всем протяжении, а затем бум, попадает в последнюю закрывающую скобку для метода и затем показывает ошибку BAD_ACCESS. Я не понимаю, что это работает,

 NSString *customerName = [[[@"Name: " stringByAppendingString:self.firstNameTextField.stringValue] stringByAppendingString:@" "] stringByAppendingString:self.lastNameTextField.stringValue];

Я также попытался скопировать значения, чтобы передать данные через методы, а также передать объект customer.

Если нужна дополнительная информация, я могу предоставить. Все поля NSTextfields сохраняются

1 ответ

Проблема была в конце функции, которую я выпускал CFStringRef, которая вызывала потерю значения до того, как оно было нарисовано. Я полагаю, я удалил

 CFRelease(customerNameStringRef);

и тогда, кажется, работает для всех них.

Другие вопросы по тегам