【问题标题】:Trouble accessing Mutable array访问可变数组时遇到问题
【发布时间】:2023-03-25 13:55:02
【问题描述】:

我在尝试为用户名编制索引的数组中重新分配数据时遇到问题。我能够将我的原始数组分成单独的对象,但无法将值发送到我需要稍后引用的新数组。我的self.userNamesArray = userNames; 行中用户名的值和计数是正确的。但是在那之后,当我登录 self.userNamesArray 时,我得到(null)。任何提示,因为我不完全确定我是欢呼!

.h

@property (nonatomic, copy) NSMutableArray *userNamesArray;

.m

- (void)viewWillAppear:(BOOL)animated {

self.friendsRelation = [[PFUser currentUser] objectForKey:@"friendsRelation"];

PFQuery *query = [self.friendsRelation query];
[query orderByAscending:@"username"];
[query findObjectsInBackgroundWithBlock:^(NSArray *objects, NSError *error) {
    if (error) {
        NSLog(@"Error: %@ %@", error, [error userInfo]);
    }
    else {
        self.friends = objects;

        NSArray *users = [self.friends valueForKey:@"username"];
        NSLog(@"username:%@", users);
        //Create an array of name wrappers and pass to the root view controller.
        NSMutableArray *userNames = [[NSMutableArray alloc] initWithCapacity:[self.friends count]];

        for (NSString *user in users) {

        componentsSeparatedByCharactersInSet:charSet];
            NSArray *nameComponents = [user componentsSeparatedByString:@" "];

            UserNameWrapper *userNameWrapper = [[UserNameWrapper alloc]    initWithUserName:nil nameComponents:nameComponents];

            [userNames addObject:userNameWrapper];
        }

        self.userNamesArray = userNames;

        NSLog(@"userNamesArray:%@",self.userNamesArray);

        [self.tableView reloadData];
    }

这是我需要引用 self.userNamesArray 的代码,这里又是 nil。

- (void)setUserNamesArray:(NSMutableArray *)newDataArray {

if (newDataArray != self.userNamesArray) {
    self.userNamesArray = [newDataArray mutableCopy];
    if (self.userNamesArray == nil) {
        self.sectionsArray = nil;
        NSLog(@"user names empty");
    }
    else {
        [self configureSections];
    }
}

}

【问题讨论】:

  • 请添加语言标签。

标签: ios objective-c arrays sorting object


【解决方案1】:

将可变数组的属性方法更改为以下:-

    @property (nonatomic, retain) 
    NSMutableArray *userNamesArray;

【讨论】:

  • 谢谢,我也试过了,结果还是一样。
  • 在 viewwillappear 中更改这一行并检查 [self setUserNamesArray:[NSArray arrayWithObject:userNames]];
  • 试过了,现在抛出这个错误:-[__NSArrayM userName]: unrecognized selector sent to instance 0x1568fb50我整天都在尝试解决这个问题。也许我只是太累了。
  • 对不起,我的错误将 nsarray arraywithobject 替换为 nsmutablearray arraywithobject
  • 我能够通过引发错误的行,并根据您的建议为我的 userNamesArray 设置值! (只需要一点睡眠)我仍然收到“无法识别的选择器发送到实例”错误,但这是另一个问题。
【解决方案2】:

这段代码是递归调用自己的吗?

self.userNamesArray = [newDataArray mutableCopy];

等价于:

[self setUserNamesArray: [newDataArray mutableCopy]];

如果您需要覆盖分配期间发生的事情,您可以像在此处那样做,但使用 _userNamesArray 来引用基础成员字段。

【讨论】:

  • 我曾尝试使用 _userNamesArray 引用,但系统抛出此行的错误访问错误self.userNamesArray = [newDataArray mutableCopy];
【解决方案3】:

首先,“userNamesArray”不需要 NSMutableArray。你可以简单地使用 NSArray。现在,试试下面的代码,你应该很高兴:

self.userNamesArray = [NSMutableArray arrayWithArray:userNames];

【讨论】:

    【解决方案4】:

    你可能会因为这行而得到 null:

    NSArray *users = [self.friends valueForKey:@"username"];

    改成:

    NSArray *users = [self.friends objectForKey:@"username"];

    此外,请遵循@Abhinav 的建议以获得更简洁的代码:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-10-25
      • 1970-01-01
      • 1970-01-01
      • 2021-12-09
      • 2017-04-11
      相关资源
      最近更新 更多