Как мне скопировать данные NSTableView с помощью NSPasteboard?

#ios #objective-c #cocoa

#iOS #objective-c #какао

Вопрос:

Я пытаюсь скопировать данные NSTableView с помощью pasteboard и хочу вставить их в виде таблицы в Microsoft Word. Как мне это сделать?

Я попытался скопировать источник данных TableView в виде строки, но не смог скопировать сам TableView.

     NSPasteboard *pasteboard=[NSPasteboard generalPasteboard];


    //_fillvalue,_levelfill(Mutable array) are the data source for my tableview with 2 column


    [pasteboard clearContents];
    int i=0;
    NSMutableArray *tval=[[NSMutableArray alloc]init];
    NSInteger row=[_tableView numberOfRows]; 

    for(i=0;i<(int)row;i  ){

        NSString *s1=[_levelfill objectAtIndex:i]; //levelfill is datasource array

        NSLog(@"s1 value is  %@",s1);
        NSString *s2=[_fillvalue objectAtIndex:i];
        s1=[s1 stringByAppendingString:@"  "];
        s1=[s1 stringByAppendingString:s2];
        [tval addObject:s1];

    }
    [pasteboard writeObjects:tval];
  

Я ожидаю, что выходные данные будут скопированы из tableview, а не из источника данных tableview. Также есть ли способ скопировать как саму таблицу, которую можно вставить как таблицу непосредственно в Microsoft Word.

Ответ №1:

Вы должны сделать что-то вроде этого

 NSPasteboard *pasteboard = [NSPasteboard generalPasteboard];
[pasteboard clearContents];

NSMutableArray *tval = [[NSMutableArray alloc]init];

//This is the equivalent of your for
[_levelfill enumerateObjectsUsingBlock:^(NSString *object, NSUInteger idx, BOOL *stop) {
    NSLog(@"_levelfill value is %@", object);
    NSString *s2 = [_fillvalue objectAtIndex:idx];
    NSString *s1 = object;
    s1 = [s1 stringByAppendingString:@"  "];
    s1 = [s1 stringByAppendingString:s2];
    // Create the string representing the row and add it to the array
    [tval addObject:s1];
}];

// Set the string in the pasteboard
[pasteboard declareTypes:[NSArray arrayWithObject:NSPasteboardTypeString] owner:nil];
[pasteboard setString:[tval componentsJoinedByString:@"n"] forType:NSPasteboardTypeString];