1

同じコードがiOS5で機能しますが、iOS 6では機能しません。つまり、カウントは0として表示されます。何かアイデアはありますか?house.pngが有効な画像であることを確認したので、カウントとして少なくとも1と表示されます。

これが私のコードです:

MyManager * myManager = [MyManager sharedInstance];
                NSString *pathOfImageFile = [[NSBundle mainBundle] pathForResource:@"house" ofType:@"png"];
                UIImage *myImage = [UIImage imageWithContentsOfFile:pathOfImageFile];

                UIImageView * tempImageView = [[UIImageView alloc] initWithImage:myImage];
                [myManager.assets addObject:tempImageView];

                NSLog(@"image count: %d", [myManager.assets count]);

これが私のシングルトンです:

#import <Foundation/Foundation.h>
#import <MapKit/MapKit.h>

@interface MyManager : NSObject
{

    MyManager *_sharedObject;
    NSMutableArray * assets;


}

//Property Listing
@property(nonatomic,copy) NSString * postTitle;
@property(nonatomic,copy) NSString * postText;
@property(nonatomic,copy) NSString * postLink;
@property(nonatomic,copy) NSString * postCategory;
//assets
@property (nonatomic, strong) NSMutableArray * assets;


+ (id)sharedInstance;
- (void)reset;



@end





#import "MyManager.h"

@implementation MyManager

//Property Listing
@synthesize postTitle=_postTitle;
@synthesize postText=_postText;
@synthesize postLink=_postLink;
@synthesize postCategory=_postCategory;
@synthesize assets=_assets;


- (id)init
{
    self = [super init];
    if ( self )
    {
         assets = [[NSMutableArray alloc] init];
        NSLog(@"Singleton Initialized...");
    }
    return self;
}




+ (id)sharedInstance
{
    static dispatch_once_t pred = 0;
    __strong static id _sharedObject = nil;
    dispatch_once(&pred, ^{
        _sharedObject = [[self alloc] init]; // or some other init method
    });
    return _sharedObject;
}



- (void)reset
{

    self.postTitle =@"";
    self.postText=@"";
    self.postLink=@"";
    self.postCategory=@"";
    [self.assets removeAllObjects];
}


@end
4

2 に答える 2

3

プロパティに関連する余分な ivar がありますassets

という名前のプロパティを定義しますassets。次に、(不必要に) 生成された ivar の名前を指定してプロパティを合成します_assets

また、(不必要に) という名前の明示的な ivar を宣言しassetsます。

initメソッドでは、配列をassetsivarに割り当てます。メソッドでは、( ivarを使用して) プロパティresetをクリアします。assets_assets

明示的なassetsivar を取り除きます。@synthesizeステートメントを取り除きます。これにより、自動生成された ivar が残り_assetsます。

プロパティまたは_assetsivar のいずれかを使用するようにコードを更新します。

于 2013-02-17T18:04:05.807 に答える
1

試す:

 _assets = [[NSMutableArray alloc] init];

そして、インターフェイスで sharedObject をプロパティとして定義しています。MyManager *_sharedObject;

[MyManager sharedInstance];そのローカル静的変数に初期化されたインスタンスを保持しているインスタンスを常に取得する場合は、それは望ましくありません。

于 2013-02-17T17:59:14.113 に答える