字符串没有填充数组数据,即使数组不是空的

时间:2015-08-06 20:22:10

标签: objective-c arrays cocoa

我正在尝试为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的对象,因此我不知道这是否会影响任何内容。

知道我需要做什么吗?

修改:添加可能相关的信息

0 个答案:

没有答案