Поэтому мне нужно добавить объекты из NSArray, которые пользователь выбрал с помощью NSOpenPanel, и поместить все имена файлов в этот массив. Тогда у меня есть NSMutableArray, называемые аргументами, которые я ставил аргументы программным путем. Затем мне нужно добавить эти объекты из NSArray в конец этого NSMutableArray. Поэтому я использую [NSMutableArray addObjectsFromArray:NSArray]
, и это все время дает мне ошибку.Как добавить объекты из NSArray в конец NSMutableArray?
Это то, что я делаю с кодом: AppDelegate.h
#import <Cocoa/Cocoa.h>
@interface ZipLockAppDelegate : NSObject <NSApplicationDelegate> {
IBOutlet NSTextField *input;
IBOutlet NSTextField *output;
IBOutlet NSTextField *password;
NSArray *filenames;
NSMutableArray *arguments;
NSArray *argumentsFinal;
}
@property (assign) IBOutlet NSWindow *window;
@property (retain) NSArray *filenames;
@property (copy) NSMutableArray *arguments;
- (IBAction)chooseInput:(id)sender;
- (IBAction)chooseOutput:(id)sender;
- (IBAction)createZip:(id)sender;
@end
AppDelegate.m
#import "ZipLockAppDelegate.h"
@implementation ZipLockAppDelegate
@synthesize window = _window;
@synthesize filenames;
@synthesize arguments;
- (IBAction)chooseInput:(id)sender {
NSOpenPanel *openZip = [[NSOpenPanel alloc] init];
[openZip setCanChooseFiles:YES];
[openZip setCanChooseDirectories:YES];
[openZip setCanCreateDirectories:NO];
[openZip setAllowsMultipleSelection:YES];
[openZip setTitle:@"Select All Files/Folders to be zipped"];
int result = [openZip runModal];
if (result == 1) {
filenames = [openZip filenames];
}
}
- (IBAction)createZip:(id)sender {
[progress startAnimation:self];
arguments = [NSMutableArray arrayWithObjects:@"-P", [password stringValue], [output stringValue], nil];
[self.arguments addObjectsFromArray:filenames];
argumentsFinal = [[NSArray alloc] initWithArray:self.arguments];
NSTask *makeZip = [[NSTask alloc] init];
[makeZip setLaunchPath:@"/usr/bin/zip"];
[makeZip setArguments:argumentsFinal];
[makeZip launch];
[makeZip waitUntilExit];
[progress stopAnimation:self];
}
И это ошибка я получаю в журнале. Я не могу понять, почему я это получаю.
EXC_BAD_ACCESS(code=13,address=0x0)
Это указывает на линии [arguments addObjectsFromArray:filenames];
Я могу сделать только первую часть о селекторе и экземпляр, но я не знаю, что это значит. Помощь ...
Вы должны использовать '-mutableCopy', когда вы устанавливаете свой массив, а не' -copy'. Вы используете ARC? –
'addObjectsFromArray:' - правильный способ добавления объектов из другого массива в конец изменяемого массива. Кроме того, 'argumentsFinal' не требуется; каждый NSMutableArray является NSArray, поэтому вы можете просто использовать 'self.arguments' для аргументов задачи. –
Я не использую ARC – drewsdunne