无法在单例中将对象添加到nsmutablearray

时间:2013-02-17 17:51:52

标签: ios ios6 nsmutablearray singleton

相同的代码适用于iOS 5但不适用于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

2 个答案:

答案 0 :(得分:3)

您有与assets财产相关的额外ivars。

您定义名为assets的属性。然后(不必要地)合成属性,指定生成的ivar应该命名为_assets

你也(不必要地)声明一个名为assets的明确的ivar。

init方法中,您将数组分配给assets ivar。在reset方法中,清除assets属性(使用_assets ivar)。

摆脱明确的assets ivar。摆脱@synthesize声明。这将为您留下_assets的自动生成的ivar。

更新您的代码以使用该属性或_assets ivar。

答案 1 :(得分:1)

尝试:

 _assets = [[NSMutableArray alloc] init];

您在接口中将sharedObject定义为属性:MyManager *_sharedObject;

如果您总是通过[MyManager sharedInstance];抓取您的实例,那么您不希望这样,该实例在本地静态var中保存初始化实例。