如何从另一个函数 Objective-C 引用数组

How to reference an array from another function Objective-C

提问人:handzel 提问时间:9/1/2020 更新时间:9/1/2020 访问量:44

问:

我已经在 SomeClass.h 中声明了数组,这是一个全局变量,不是吗?

@property (nonnull, nonatomic, retain) NSMutableArray *additional_tabs;

下面我声明了 2 个函数,我使用这个数组。

- (id _Nullable)initFromJSON:(NSDictionary *_Nullable)dictionary;

- (void)moreTabs:(NSMutableArray *_Nullable)a;

下面是我在函数内部使用的 if 语句。initFromJSON

if ([Tools isNonullValueForKey:[dictionary valueForKey:@"additional_tabs"]]) {
        _additional_tabs = [NSMutableArray new]; //really I need them?
        _additional_tabs = [dictionary valueForKey:@"additional_tabs"];
            
            NSLog(@"additionalTabCount (initJSON) = %lu", [_additional_tabs count]);
            
            for (int i = 0; i < [_additional_tabs count]; i++) {
                 
                 if ([Tools isNonullValueForKey:[_additional_tabs valueForKey:@"_id"]]) {
                     _additional_tab_id = [[_additional_tabs valueForKey:@"_id"] objectAtIndex:i];
                 }
                     
                 if ([Tools isNonullValueForKey:[_additional_tabs valueForKey:@"names"]]) {
                     NSDictionary *dic = [[_additional_tabs valueForKey:@"names"] objectAtIndex:i];
                     _en_additional_tab_name = [dic valueForKey:@"en"];
                     _pl_additional_tab_name = [dic valueForKey:@"pl"];
                 }
                     
                 if ([Tools isNonullValueForKey:[_additional_tabs valueForKey:@"url"]]) {
                     _additional_tab_url = [[_additional_tabs valueForKey:@"url"] objectAtIndex:i];
                 }
                
                NSLog(@"%@ %d %@ %@ %@ %@", @"pos", i,  @"id: ", _additional_tab_id, @"url: ", _additional_tab_url);
            }
        }

这有 17 个。 但在功能上:[_additional_tabs count]moreTabs

    NSLog(@"additional tabs count: %lu",[_additional_tabs count]);
    for (int i = 1; i < [_additional_tabs count]; i++) {
    [a addObject:[[VCTab alloc] initWithIdAndTypeAndUrl:[[_additional_tabs valueForKey:@"_id"] objectAtIndex:i] :VCTabAdditional :[[_additional_tabs valueForKey:@"url"] objectAtIndex:i]]];
    }
}

以零返回...看起来像是不同的数组还是清除的?[_additional_tabs count]

我将非常感谢您的帮助:) 祝一切顺利

iOS 数组 Objective-C 闭包 nsmutableArray

评论

2赞 Paulw11 9/1/2020
它不是全局的,它是一个实例属性。在这两种情况下,您是否都使用相同的类实例?此外,从风格的角度来看,在客观 c 标识符中更喜欢 camelCase 而不是 _,我建议你始终使用 setter/getter via,而不是直接使用 _ 访问支持iVar,除非你有充分的理由。self.
1赞 Paulw11 9/1/2020
您还应该注意异步执行。您的第一个函数提到了 JSON。它是否从网络中检索数据?您是否在网络操作完成之前调用第二个函数?
0赞 Keith Knauber 9/2/2020
是的,您需要 self._additional_tabs = blahblahblah 才能保证它被保留。而且你不需要第一行 [NSDictionary new]
0赞 handzel 9/2/2020
@Paulw11 @KeithKnauber我添加了“self”,数组仍然返回 nil。如果我在调试时使用断点,第一种方法是 JSON,并在日志中打印 id、url 和名称以进行响应。下一步是 moreTabs() 中的 addObject。我在 LeftMenuViewController 中使用了这个方法,看看:Conference *cf = [Conference new]; [cf moreTabs:vcTabs]; [self logArray];

答: 暂无答案