我正在尝试为Mac OS X创建一个非基于文档的应用程序,为Dominion游戏随机化卡片。
从我尝试过的许多内容中,我唯一不能做的就是限制从用户选择中选择的集合数量,并且在我的程序中工作得很好,但是我遇到了问题。
我正在尝试将结果打印到自定义视图中,但每次查看打印预览时,除了标题文本外,没有任何内容显示在NSMutableString中。
这段代码是用于打印的代码,可以在MasterViewController中找到:
- (IBAction)print:(id)sender
{
NSMutableString *content = [[NSMutableString alloc] initWithString:@"Cards\r\n\r\n"];
for (int i = 0; i < [supply.game count]; i++)
{
[content appendFormat:@"Card: %@ Set: %@ Cost: %d\r\n", [supply.game[i] name], [supply.game[i] collection], [supply.game[i] cost]];
}
[content appendFormat:@"\r\n\r\nRequired\r\n\r\n"];
for (int i = 0; i < [[setup supply] count]; i++)
{
NSDictionary* current = [setup supply][i];
NSString* key = [current allKeys][0]; // get the key of the current dictionary must be 0, as there is only one key
int value = [[current valueForKey:key] integerValue]; // variable to hold key value
if (value > 0) {
[content appendFormat:@"%@: %@", key, @"Yes"];
}
else
{
[content appendFormat:@"%@: %@", key, @"No"];
}
}
printView.content = [NSMutableString stringWithString:content];
[printView print:sender];
}
数据最初填充到一些tableviews中,显示正确的内容,而supply.game数组是包含用于游戏的卡的确切数组。
setup是一个属性,它引用一个视图控制器,用一些可能是游戏所需的卡片填充表格(例如庇护所,殖民地,废墟,战利品和药水),并且供应方法应该返回数组该视图控制器创建,它本身不为空,因为该表正确填充。
printView是一个属性,分配给MainMenu.xib中的自定义视图,是用于打印的真实视图。
printView类如下所示:
头:
#import <Cocoa/Cocoa.h>
@interface PrintView : NSView
{
NSMutableString* content;
}
@property NSMutableString* content;
- (void)drawStringInRect:(NSRect)rect; // method to draw string to page
- (void)print:(id)sender; // method to print
@end
实现:
#import "PrintView.h"
@implementation PrintView
@synthesize content;
- (BOOL)acceptsFirstResponder
{
return YES;
}
- (void)print:(id)sender
{
[[NSPrintOperation printOperationWithView:self] runOperation];
}
- (void)drawRect:(NSRect)dirtyRect {
NSGraphicsContext *context = [NSGraphicsContext currentContext];
if ([context isDrawingToScreen])
{
}
else
{
[[NSColor whiteColor] set];
NSRect bounds = [self bounds];
if (content == nil || [content length] == 0)
{
NSRectFill(bounds);
}
else
{
[self drawStringInRect:bounds];
}
}
}
- (void)drawStringInRect:(NSRect)rect
{
NSSize strSize; // variable to hold string size
NSPoint strOrigin; // variable used to position text
NSMutableDictionary *attributes = [[NSMutableDictionary alloc] init];
[attributes setObject:[NSFont fontWithName:@"Helvetica" size:12] forKey:NSFontAttributeName];
[attributes setObject:[NSColor blackColor] forKey:NSForegroundColorAttributeName];
strSize = [content sizeWithAttributes:attributes];
strOrigin.x = rect.origin.x + (rect.size.width - strSize.width)/2;
strOrigin.y = rect.origin.y + (rect.size.height - strSize.height)/2;
[content drawAtPoint:strOrigin withAttributes:attributes];
}
@end
当我检查打印操作的数组大小时,数组的大小报告为零,从而导致我当前的问题
如果你需要更多的代码,这里是来自Github的代码,但我没有实验分支,这是上面代码的来源,尽管它不应该太不同。
MasterViewController将显示如何生成supply.game数组,SetupViewController包含用于确定游戏所需内容的代码,以及如何生成[setup supply]中的供应数组。 / p>
MasterViewController也被添加为MainMenu.xib的对象,因此我不知道这是否会影响任何内容。
知道我需要做什么吗?
修改:添加可能相关的信息