我将字符串(在某个目录中是文件的文件名)放入带有for循环的NSMutableArray中: h文件:
#import <Three20/Three20.h>
@interface AlbumController : TTThumbsViewController {
NSMutableArray *images;
}
@property (nonatomic, retain) NSMutableArray *images;
@end
m文件:
#import "AlbumController.h"
#import "PhotoSource.h"
#import "Photo.h"
@implementation AlbumController
@synthesize images;
-(void)createPhotos {
NSString *bundleRoot = [[NSBundle mainBundle] bundlePath];
NSArray *dirContents = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:bundleRoot error:nil];
NSArray *onlyJPGs = [dirContents filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"self ENDSWITH '.jpg'"]];
NSMutableArray *pics = [[onlyJPGs copy] autorelease];
if(!self.images) {
self.images = [[NSMutableArray alloc] init];
}
for(int i = 0; i < [onlyJPGs count]; i++)
{
//NSLog([pics objectAtIndex:i]);
NSString *ImgURL = [@"bundle://" stringByAppendingString:[pics objectAtIndex:i]];
Photo *photo = [[Photo alloc] initWithURL:ImgURL smallURL:ImgURL size:CGSizeMake(320, 212)];
[images addObject:photo];
[photo release];
}
}
-(void)viewDidLoad{
[self createPhotos]; // method to set up the photos array
self.photoSource = [[PhotoSource alloc]
initWithType:PhotoSourceNormal
title:@"Chili Pflanzen"
photos:images
photos2:nil
];
}
@end
我在模拟器中没有任何问题,但在我的iPod上......
错误讯息:
数据FOrmatters暂时不可用,将在“继续”后重试。 (加载共享库时出现未知错误“/Developer/usr/lib/libXcodeDebuggerSupport.dylib”)
提前致谢
答案 0 :(得分:1)
看起来主要问题是
[images addObject:[[Photo alloc] initWithURL:ImgURL smallURL:ImgURL size:CGSizeMake(320, 212)]];
在这里你分配照片但不发布它。将对象添加到数组时,会增加对象的保留计数。
尝试将其更改为
Photo *photo = [[Photo alloc] initWithURL:ImgURL smallURL:ImgURL size:CGSizeMake(320, 212)];
[images addObject:photo];
[photo release];
另外......
我要改变
self.images = [[[NSMutableArray alloc] init] autorelease];
到
if(!self.images) {
self.images = [[NSMutableArray alloc] init];
}
否则如果已经初始化,则可能存在内存泄漏,以及您可能不希望它自动释放;
答案 1 :(得分:1)
我认为你应该使用mutableCopy而不是复制你的pics数组。
所以代替: NSMutableArray * pics = [[onlyJPGs copy] autorelease]; 你应该使用: NSMutableArray * pics = [[onlyJPGs mutableCopy] autorelease];
有关此问题中的复制/可变复制的更多信息:Copy & mutableCopy?
答案 2 :(得分:0)
您的NSMutableArray
实例已自动释放。您正在将其分配给images
ivar。您已将其声明为保留属性这一事实并不重要,因为您没有将其分配给该属性。我的猜测是你打算分配给属性,崩溃是由无意中的释放造成的。
变化:
images = [[[NSMutableArray alloc] init] autorelease];
...为:
self.images = [[[NSMutableArray alloc] init] autorelease];
...或:
images = [[NSMutableArray alloc] init];
另请注意,在分配NSArray
的实例时,您的属性会声明为NSMutableArray
。