我在尝试将NSMutableArray
字符串分享给另一个班级时遇到了一些麻烦。我有一个填充了tableView
的{{1}},我想将其添加到Strings
。然后在另一个NSMutableArray
NSMutableArray
我创建了一个子类为ViewController
·H
NSMutableArray
的.m
#import <Foundation/Foundation.h>
@interface HYServicesMArray : NSMutableArray
@property (nonatomic, weak)NSMutableArray * arrServicesUserChoice;
@end
我正在尝试从#import "HYServicesMArray.h"
@implementation HYServicesMArray
@dynamic arrServicesUserChoice;
@end
NSMutableArray
添加元素
的.m
tableView didSelectRowAtIndexPath:
我怎么也无法向- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"You have selected: %@",cell.textLabel.text);
// add cell.textLabel.text to arrServicesUserChoice
// Tried the code below but causes my app to crash
arrServicesUserChoice = [[NSMutableArray alloc]init];
[arrServicesUserChoice addObject:cell.textLabel.text];
}
添加元素。我被困了请求帮助!先感谢您!
答案 0 :(得分:1)
你声明了一个可变数组,你用来添加的代码返回一个数组,但是它不添加任何数据。你必须添加像:
这样的对象 [arrAvaialbleServicesList addObject:cell.textlabel.text];
在此之后,您的可变数组将具有添加的数据
或者你可以声明另一个数组,并按照你的方式“
NSArray *test=[arrAvaialbleServicesList arrayByAddingObject:cell.textLabel.text];
之后,新数组将为数组添加数据。
答案 1 :(得分:1)
我认为你应该改变
@dynamic arrServicesUserChoice;
要
@synthesize arrServicesUserChoice;
答案 2 :(得分:0)
MutableArray的原始初始化没有做任何事情,也没有将arrAvalabelServiceList指定为Mutable - arrayByAddingObject创建一个全新的实例NSArray,而不是NSMutableArray
arrAvaialbleServicesList = [[NSMutableArray alloc]init];
[arrAvaialbleServicesList arrayByAddingObject:cell.textLabel.text];
但是,如果您这样做,则不会将此新实例分配给任何内容:
arrAvaialbleServicesList = [arrAvaialbleServicesList arrayByAddingObject:cell.textLabel.text];
您至少可以获得新NSArray实例的句柄。
您应该在设置表格时创建列表:
arrAvaialbleServicesList = [[NSMutableArray alloc]init];
在您的didSelect上,您只需将文本添加到列表中:
NSString *selected = [NSString stringWithString:cell.textLabel.text];
[arrAvaialbleServicesList addObject:selected];
或接近此的东西,只要你在表格中选择一行,你就会在列表中添加一些内容。
答案 3 :(得分:0)
您尝试创建的是一种公共静态var正确吗?我认为更好的方法是创建一个可以处理MutableArray对象的类。将她作为单例类进行操作是保证不创建对象的另一个实例并丢失MutableArray的好方法。这是一个示例:
HYServicesMArray.h
#import <Foundation/Foundation.h>
@interface HYServicesMArray : NSObject
@property (nonatomic, strong) NSMutableArray *arrServicesUserChoice;
+ (HYServicesMArray *) instance;
@end
HYServicesMArray.m
#import "HYServicesMArray.h"
@implementation HYServicesMArray
+ (HYServicesMArray *)instance
{
static HYServicesMArray *_ServicesMArray = nil;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
_ServicesMArray = [[self alloc] init];
});
return _ServicesMArray;
}
-(id)init {
self.arrServicesUserChoice = [[NSMutableArray alloc] init];
return self;
}
@end
你的didSelectRowAtIndexPath方法上的应用程序:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"You have selected: %@",cell.textLabel.text);
[[HYServicesMArray instance].arrServicesUserChoice addObject:cell.textLabel.text];
}
答案 4 :(得分:0)
您应该将其设为@synthesized
并将该属性取消引用为self.arrServicesUserChoice
。 (你可以只在Swift中离开self
。)
这应该编译:
- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
[tableView cellForRowAtIndexPath:indexPath].accessoryType = UITableViewCellAccessoryCheckmark;
UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];
NSLog(@"You have selected: %@",cell.textLabel.text);
self.arrServicesUserChoice = [[NSMutableArray alloc] init];
[self.arrServicesUserChoice addObject:cell.textLabel.text];
}
答案 5 :(得分:0)
您无需声明@dynamic
,您需要@synthesize
它。如果您不想@synthesize
,请使用自我。你可以在这里检查这两者之间的区别。
@synthesize vs @dynamic, what are the differences? 如果你想在另一个类中使用这个相同的数组,那么你应该在该类中声明一个属性,并使用segue将这个类的数组传递给另一个类。