Я написал эту программу поиска для поиска по массиву объектов, который содержит имя файла и путь к файлу на моем компьютере. Когда я написал программу, у меня было два тестовых файла, которые отлично работали с моим кодом. Затем я начал добавлять фактические файлы, и он отлично работал с 10-20 файлами, поэтому я решил добавить еще несколько (около 45, что составило в общей сложности около 60 файлов). Это было ошибкой; Программа запускается, но я не могу найти какой-либо файл, не получив сообщение «Thread 1: signal SIGABRT», на линии была моя функция поиска. Я также получаю сообщение об ошибке в консоли, но я боюсь, что не могу этого понять. Неважно, если файл доступен для поиска, когда у меня всего 10 файлов, он перестает работать, когда я использую их все. Я включил мой код ниже:Программа перестает работать со слишком большим количеством файлов в массиве
SMADoc.h (пользовательский класс для создания объектов, которые PDF в)
#import <Foundation/Foundation.h>
@interface SMADoc : NSObject
@property (nonatomic) NSNumber *docNumber
@property (nonatomic) NSString *urlToDoc;
@end
main.m (с 5 файлов)
#import <Foundation/Foundation.h>
#import "SMADoc.h"
#include <readline/readline.h>
@import AppKit;
void *documentSearch() {
SMADoc *one = [[SMADoc alloc] init];
[one setdocNumber:@(17800)];
[one setUrlToDoc:@"/Users/Docs/docPath1.pdf"];
SMADoc *two = [[SMADoc alloc] init];
[two setdocNumber:@(11632)];
[two setUrlToDoc:@"/Users/Docs/docPath2.pdf"];
SMADoc *three = [[SMADoc alloc] init];
[three setdocNumber:@(17583)];
[three setUrlToDoc:@"/Users/Docs/docPath3.pdf"];
SMADoc *four = [[SMADoc alloc] init];
[four setdocNumber:@(14351)];
[four setUrlToDoc:@"/Users/Docs/docPath4.pdf"];
SMADoc *five = [[SMADoc alloc] init];
[five setdocNumber:@(11628)];
[five setUrlToDoc:@"/Users/Docs/docPath5.pdf"];
NSMutableArray *docs = [[NSMutableArray alloc] initWithObjects:one, two, three, four, five, nil];
int i = 0;
NSLog(@"Enter what you want to search for: ");
const char *searchC = readline(NULL);
int number = atoi(searchC);
NSNumber *sNumber = [NSNumber numberWithInteger:number];
for (SMADoc *nSearch in docs) {
if ([sNumber isEqualToNumber:[nSearch docNumber]]) {
NSLog(@"Opening document...");
[[NSWorkspace sharedWorkspace] openFile:[nSearch urlToDoc]];
}
if (![sNumber isEqualToNumber:[nSearch docNumber]]) {
i++;
}
}
if (i == [docs count]) {
NSLog(@"A match could not be found, please check your spelling");
}
free(documentSearch());
documentSearch();
return 0;
}
int main(int argc, const char * argv[]) {
@autoreleasepool {
NSLog(@"message");
documentSearch();
}
return 0;
}
, и это эта линия ниже, которая получает SIGABRT ошибок:
if ([sNumber isEqualToNumber:[nSearch docNumber]]) {
И это выход в консоли:
2015-07-09 14:28:25.047 LIX4[3537:108937] message
2015-07-09 14:28:25.049 LIX4[3537:108937] Enter what you want to search for:
1177880000
2015-07-09 14:28:27.505 LIX4[3537:108937] Opening document...
2015-07-09 14:28:27.633 LIX4[3537:108937] An uncaught exception was raised
2015-07-09 14:28:27.633 LIX4[3537:108937] -[__NSCFNumber compare:]: nil argument
2015-07-09 14:28:27.633 LIX4[3537:108937] (
0 CoreFoundation 0x00007fff8b8ae03c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff8ef9076e objc_exception_throw + 43
2 CoreFoundation 0x00007fff8b8adeed + [NSException raise:format:] + 205
3 CoreFoundation 0x00007fff8b7ab031 - [__NSCFNumber compare:] + 81
4 CoreFoundation 0x00007fff8b7aafc8 - [__NSCFNumber isEqualToNumber:] + 24
5 LIX4 0x0000000100004a3a documentSearch + 14490
6 LIX4 0x0000000100005355 main + 53
7 libdyld.dylib 0x00007fff8fb6f5c9 start + 1
)
2015-07-09 14:28:27.634 LIX4[3537:108937] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFNumber compare:]: nil argument'
*** First throw call stack:
(
0 CoreFoundation 0x00007fff8b8ae03c __exceptionPreprocess + 172
1 libobjc.A.dylib 0x00007fff8ef9076e objc_exception_throw + 43
2 CoreFoundation 0x00007fff8b8adeed +[NSException raise:format:] + 205
3 CoreFoundation 0x00007fff8b7ab031 -[__NSCFNumber compare:] + 81
4 CoreFoundation 0x00007fff8b7aafc8 -[__NSCFNumber isEqualToNumber:] + 24
5 LIX4 0x0000000100004a3a documentSearch + 14490
6 LIX4 0x0000000100005355 main + 53
7 libdyld.dylib 0x00007fff8fb6f5c9 start + 1
)
libc++abi.dylib: terminating with uncaught exception of type NSException
(lldb)
Если бы кто-нибудь мог помочь мне разобраться в этом, я был бы очень признателен!
Это не выглядит, как вы разместили код, где ошибка на самом деле происходит: строку, которую цитировал (с вызов '-LIX_number') не отображается. –
В сообщении об ошибке указано, что NSNumber сравнивается с значением nil, которое вызывает исключение. Что такое 'LIX_number'? – vadian
Упс, неправильная строка, мой плохой – pinkRobot435