Мне нужна помощь.Код плохого доступа 1 при использовании Singleton
Я использую этот одноплодный шаблон внутри приложения IOS я разрабатываю:
.h файл
#import <Foundation/Foundation.h>
@class Item;
@interface ItemManager : NSObject
- (id)init;
+ (ItemManager *)sharedInstance;
- (int)ratingFromObjectName:(NSString *)objectName;
@property(nonatomic,strong) NSArray *itemArray;
@end
.m файл
static ItemManager *sharedInstance = nil;
+ (ItemManager *)sharedInstance
{
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
sharedInstance = [[ItemManager alloc] init];
});
return sharedInstance;
}
- (int)ratingFromObjectName:(NSString *)objectName {
for (int i = 0; i < itemArray.count; i++) {
if ([[[itemArray objectAtIndex:i] itemName] isEqualToString:objectName]) { //This is the line that throws bad access code 1
NSLog(@"Found: %@ Returned: %d", [[itemArray objectAtIndex:i] ratingAverage],
[[[itemArray objectAtIndex:i] ratingAverage] intValue]);
return [[[itemArray objectAtIndex:i] ratingAverage] intValue];
}
}
return 0;
}
Я получаю плохой доступ, когда я используйте это в другом классе:
int rating = [[ItemManager sharedInstance] ratingFromObjectName:bla];
Объект bla, который отправляется, является NSString, который определенно работает, это 100% не проблема, поскольку я тестировал это. Удаление метода sharedInstance и создание массива каждый раз, кажется, работает, однако моя попытка для этого синглтона заключается в том, чтобы избежать этого, любые предложения были бы весьма признательны.
Обратите внимание, что я прокомментировал строку, возвращающую ошибку.
С уважением, WA
Какой объект "bla'"? Кроме того, вы получаете правильные значения из вашего «NSLog», напечатанного на консоли? –
Bla - это строка, она работает правильно, если я продолжаю создавать экземпляр ItemManager, но это не то, что я хочу, мне нужен синглтон, поэтому он на init один раз. – user3131312
Почему вам даже нужен синглтон ?, похоже, что это может быть достигнуто с помощью метода класса. –