У меня есть Singleton для управления некоторыми переменными, которые мне нужны в разных местах моего приложения. Это синглтон, называется General:EXC_BAD_ACCESS Код = 2 при использовании Singleton
#import "General.h"
static General *sharedMyManager = nil;
@implementation General
@synthesize user;
@synthesize lon;
@synthesize lat;
@synthesize car;
@synthesize firstmess;
@synthesize firstfrom;
@synthesize numcels;
#pragma mark Singleton Methods
+ (id)sharedManager {
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
if (sharedMyManager == nil) {
sharedMyManager = [[self alloc] init];
}
});
return sharedMyManager;
}
- (id)init {
if (self = [super init]) {
user = [[NSString alloc] initWithString:@"vacio"];
numcels=0;
}
return self;
}
- (void)dealloc {
// Should never be called, but just here for clarity really.
}
@end
Я использую его в TableView, которые представляют в экранных сообщениях части моего приложения, которое является чатом. Я имею в виду, каждый раз, когда приложение получает или отправляет сообщение, я добавляю 1 к var "numcels", и это значение, которое возвращает метод numberOfRowsInSection.
-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
General *general = [General sharedManager];
return *(general.numcels); //It freezes here
}
Проблема заключается в том, когда я запустить программу, она замерзает на комментировал линии, говоря EXC_BAD_ACCESS код = 2. Я предполагаю, что проблема может быть с синглтоном, но не знаю, где именно.
Любая помощь? Заранее спасибо.
------- -------- EDIT
-(UITableViewCell *) tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSLog(@"Hemos entrado en cellForRowAtIndexPath");
UITableViewCell *cell=[tableView dequeueReusableCellWithIdentifier:@"UITableViewCell"];
if(!cell){
UITableViewCell *cell=[[UITableViewCell alloc]initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:@"UITableViewCell"];
}
General *general = [General sharedManager];
NSString *text=general.firstmess;//it crashes now here
NSString *remite=general.firstfrom;
[[cell textLabel]setText:remite];
[[cell detailTextLabel] setText:text];
return cell;
}
И General.h, по запросу:
#import <Foundation/Foundation.h>
@interface General : NSObject {
NSString *user;
double lat;
double lon;
}
@property (nonatomic, retain) NSString *user;
@property (assign, nonatomic) double lat;
@property (assign, nonatomic) double lon;
@property (assign, nonatomic) Boolean car;
@property (assign, nonatomic) NSString *firstmess;
@property (assign, nonatomic) NSString *firstfrom;
@property (assign, nonatomic) int numcels;
+ (id)sharedManager;
@end
Почему вы делаете * (general.numcels); ..? Я имею в виду, какова идея звезды? –
Если я этого не делаю, он показывает предупреждение «несовместимый указатель на целочисленное преобразование ...» – Fustigador
вы можете показать мне ваш .h ...? –