gpt4 book ai didi

ios - 填充数组未给出预期结果

转载 作者:行者123 更新时间:2023-11-28 22:12:14 25 4
gpt4 key购买 nike

我用 Java 做过很多面向对象的编程,但我对 Objective C 还很陌生。

我是否正确地执行了以下操作。

Package.h

@interface Packages : NSObject
@property (nonatomic) NSArray *pictureArray;
@property (nonatomic) NSString *folderPath;
- (id)initWithPath:(NSString *)path;
-(NSArray *)getPackageItems;
-(NSString *)getFolderPath;
@end

Package.m

@implementation Packages

- (id)initWithPath:(NSString *)path
{
self = [super init];
if (self)
{
NSString *folderPath = [NSString stringWithFormat:@"%@/Objects/%@", [[NSBundle mainBundle] bundlePath], path]; //Path
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:folderPath error: nil];
self.pictureArray = [fileList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"pathExtension IN %@", @"png", @"(content BEGINSWITH %@)", @"object_"]];
}
for (NSString *s in self.pictureArray) {
NSLog(@"%@", s);
}
return self;
}

-(NSArray *)getPackageItems{
return self.pictureArray;
}

-(NSString *)getFolderPath{
return self.folderPath;
}
@end

我的一个 View 的 viewdidload 中的问题代码

  NSMutableArray *packages = [[NSMutableArray alloc] init];
for(id key in temp){
NSLog(@"key=%@ value=%@", key, [temp objectForKey:key]);
Packages *tmp = [[Packages alloc] initWithPath:[temp objectForKey:key]];
[packages addObject:tmp];

}

所以这个 for 循环正在迭代我拥有的 plist。一系列路径。

对于每个路径,它都会创建一个 Packages 实例并将其添加到包数组中。

但是,我什么时候做这个

NSArray *something = [packages[1] getPackageItems];

无论如何,我得到的结果都是空的!

甚至当我这样做的时候

NSLog(@"%@", [packages[0] getFolderPath]);

它打印出 null。

我做错了什么。

编辑

图片文件夹是这样的

enter image description here

当 Objects 目录中的所有图片都没有任何子目录时,用于提取它的代码可以正常工作。我希望我正确地编辑了代码以处理子目录

编辑2

NSError *error;
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.folderPath error: &error];
NSLog(@"%@, %@", fileList , error);

在线

NSString *folderPath = [NSString stringWithFormat:@"%@/Objects", [[NSBundle mainBundle] bundlePath], path]; //Path

打印成功

2014-03-23 21:25:32.200 ScrollBar[4475:60b] (
"object_eyes_0_0.png",
"object_eyes_10_1.png",
"object_eyes_10_2.png",
"object_eyes_10_3.png",
"object_eyes_10_4.png",
"object_eyes_10_5.png",
"object_eyes_10_6.png",
"object_eyes_10_7.png",

当我这样做

NSString *folderPath = [NSString stringWithFormat:@"%@/Objects/%@/objects", [[NSBundle mainBundle] bundlePath], path]; //Path

哪些输出

2014-03-23 21:27:46.951 ScrollBar[4496:60b] (null), Error Domain=NSCocoaErrorDomain Code=260 "The operation couldn’t be completed. (Cocoa error 260.)" UserInfo=0x8e2dda0 {NSUnderlyingError=0x8e2d020 "The operation couldn’t be completed. No such file or directory", NSFilePath=/Users/dev/Library/Application Support/iPhone Simulator/7.1/Applications/8B55D440-5727-471E-9BCC-1513C190740E/ScrollBar.app/Objects/object_eye_0_0/objects, NSUserStringVariant=(
Folder
)}

但是如上图所示,文件结构确实存在。

解决方案:

我接受了一个答案,尽管它不是真正的答案,但这是找出问题所在的明确途径。

问题是您无法使用提供的代码引用包含子文件夹的文件夹。我只有很多文件夹。

最佳答案

在您的 initWithPath: 中,您有 NSString *folderPath = 声明一个局部变量并为其分配一些值。但是您没有保存值,所以 self.folderPathnil

- (id)initWithPath:(NSString *)path
{
self = [super init];
if (self)
{
self.folderPath = [NSString stringWithFormat:@"%@/Objects/%@", [[NSBundle mainBundle] bundlePath], path];
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.folderPath error: nil];
self.pictureArray = [fileList filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"pathExtension IN %@", @"png", @"(content BEGINSWITH %@)", @"object_"]];
}
for (NSString *s in self.pictureArray) {
NSLog(@"%@", s);
}
return self;
}

记录错误

NSError *error;
NSArray *fileList = [[NSFileManager defaultManager] contentsOfDirectoryAtPath:self.folderPath error: &error];
NSLog(@"%@, %@", fileList , error);

永远不要做 NSLog([S​​omeclass someMethod]),使用 NSLog(@"%@", [Someclass someMethod]) 代替

关于ios - 填充数组未给出预期结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22600547/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com