1

アプリのさまざまな場所で必要ないくつかの変数を管理するシングルトンがあります。これは、Generalと呼ばれるシングルトンです。

#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で使用します。つまり、アプリがメッセージを受信または送信するたびに、変数「numcels」に1を追加します。これは、numberOfRowsInSectionメソッドが返す値です。

-(NSInteger) tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
{
General *general = [General sharedManager];
return *(general.numcels); //It freezes here
}

問題は、プログラムを実行すると、コメント行でEXC_BAD_ACCESS code=2と表示されてフリーズすることです。問題はシングルトンにあると思いますが、正確にはどこにあるのかわかりません。

何か助けはありますか?前もって感謝します。

- - - -編集 - - - -

-(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
4

2 に答える 2

2

次のようになります。

return general.numcels;

numcelsは整数であり、*演算子を適用することはできません。

于 2012-06-14T10:43:14.523 に答える
0

最初の問題を解決した後 (Ankit の親切な助けのおかげで)、EDIT の下にコメントした行でクラッシュしました。単純に変えました

@property (nonatomc, assign) NSString *firstmess;

@property (retain, nonatomic) NSString *firstmess;

そして、もうクラッシュしません。

ありがとうございました!

于 2012-06-14T11:35:03.067 に答える