![](/img/trans.png)
[英]How to add an NSMutableArray to an NSMutableArray Objective-c
[英]Objective-C How to add objects to NSMutableArray from other place?
您好,我是 Objective-C 和 Swift 編程的大三學生。
我在 ExampleMenuViewController.m 或(和)SomeClass.m 中將 NSMutableArray 聲明為 vcTabs。
NSMutableArray *vcTabs;
當我有兩個聲明 'vcTabs' Xcode 返回duplicate symbol '_vcTabs' (...)
如何將對象添加到其他 class (ExampleMenuViewController.m) 中的現有 NSMutableArray init? 我需要從另一個 class (SomeClass.m) 到 vcTabs (NSMutableArray) 的 append 個新對象。
我在 SomeClass.m 中寫了這段代碼:
if ([Tools isNonullValueForKey:[dictionary valueForKey:@"additional_tabs"]]) {
additional_tabs = [dictionary valueForKey:@"additional_tabs"];
NSLog(@"additionalTabs count: %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(@"additional_tab_url: %@", _additional_tab_url);
}
[vcTabs addObject:[[VCTab alloc] initWithIdAndTypeAndUrl:additional_tab_id :VCTabAdditional :additional_tab_url]];
NSLog(@"%@ %d %@ %@ %@ %@", @"pos", i, @"id: ", additional_tab_id, @"url: ", additional_tab_url);
}
}
帶有 initVCTabs 的 ExampleMenuViewController 方法
- (void)initVCTabs {
vcTabs = [[NSMutableArray alloc] init];
[vcTabs removeAllObjects];
if ([Tools getBooleanUserDefault:@"example_visible_tab_attendees" :YES]) {
[vcTabs addObject:[[VCTab alloc] initWithType:VCTabAttendees]];
}
(...)
if ([Tools getBooleanUserDefault:@"example_visible_tab_user_info" :YES]) {
[vcTabs addObject:[[VCTab alloc] initWithType:VCTabUserInfo]];
}
if ([Tools getStringUserDefault:@"example_additional_tab_id" :@""]) {
NSString *additionalTabId = [Tools getStringUserDefault:@"conference_additional_tab_id" :@""];
NSString *additionalTabUrl = [Tools getStringUserDefault:@"conference_additional_tab_url" :@""];
NSLog(@"additionalTabId %@", additionalTabId);
NSLog(@"additionalTabUrl %@", additionalTabUrl);
[vcTabs addObject:[[VCTab alloc] initWithIdAndTypeAndUrl:additionalTabId :VCTabAdditional :additionalTabUrl]];
}
}
附言。 如果我從 ExampleMenuViewController 使用,我只有一個選項卡具有最后 object 個屬性...但是additional_tabs
數組有 17 個對象。
你有什么想法或建議嗎? 祝大家一切順利!
你什么時候打電話給initVCTabs
?
SomeClass.m
中的代碼何時/如何運行?
作為“Objective-C 和 Swift 編程的初級”,您似乎有很多事情是您還不了解的。 嘗試創建一個新項目並了解其工作原理——然后在您的整個項目中實施它。
這是一個非常非常簡單的例子。 根據您在問題中提供的信息,這可能會或可能不會直接相關 - 但它應該讓您了解 go 的位置:
類.h
// SomeClass.h
// Created by Don Mag on 8/30/20.
#import <Foundation/Foundation.h>
NS_ASSUME_NONNULL_BEGIN
@interface SomeClass : NSObject
- (void)moreTabs:(NSMutableArray *)a;
@end
NS_ASSUME_NONNULL_END
一些類.m
// SomeClass.m
// Created by Don Mag on 8/30/20.
#import "SomeClass.h"
@interface SomeClass()
@end
@implementation SomeClass
- (void)moreTabs:(NSMutableArray *)a {
[a addObject:@"B"];
[a addObject:@"C"];
[a addObject:@"D"];
[a addObject:@"E"];
}
@end
ExampleMenuViewController.h
// ExampleMenuViewController.h
// Created by Don Mag on 8/30/20.
#import <UIKit/UIKit.h>
NS_ASSUME_NONNULL_BEGIN
@interface ExampleMenuViewController : UIViewController
@end
NS_ASSUME_NONNULL_END
ExampleMenuViewController.m
// ExampleMenuViewController.m
// Created by Don Mag on 8/30/20.
#import "ExampleMenuViewController.h"
#import "SomeClass.h"
@interface ExampleMenuViewController ()
{
NSMutableArray *vcTabs;
}
@end
@implementation ExampleMenuViewController
- (void)viewDidLoad {
[super viewDidLoad];
// add a button to the view
//UIButton *b = [UIButton new];
UIButton *b = [UIButton buttonWithType:UIButtonTypeSystem];
[b setTitle:@"Tap Me" forState:UIControlStateNormal];
b.frame = CGRectMake(0, 0, 200, 50);
b.center = self.view.center;
[self.view addSubview:b];
[b addTarget:self action:@selector(btnTapped) forControlEvents:UIControlEventTouchUpInside];
[self initVCTabs];
[self logArray];
}
- (void)initVCTabs {
// instantiate NSMutableArray
vcTabs = [NSMutableArray new];
// add one object
[vcTabs addObject:@"A"];
}
- (void)btnTapped {
SomeClass *sc = [SomeClass new];
[sc moreTabs:vcTabs];
[self logArray];
}
- (void)logArray {
NSLog(@"vcTabs has %ld objects", [vcTabs count]);
for (NSString *s in vcTabs) {
NSLog(@"%@", s);
}
}
@end
當ExampleMenuViewController
加載時,它會在視圖的中心添加一個按鈕,然后實例化vcTabs
數組並添加一個 object - @"A"
。
我們將數組記錄到調試控制台並查看:
vcTabs has 1 objects
A
當您點擊按鈕時,將創建SomeClass
的實例,我們調用該 class 中的moreTabs
方法,傳遞對vcTabs
的引用。 該方法會將 4 個對象添加到數組 - @"B" @"C" @"D" @"E"
。
然后我們將數組記錄到調試控制台並查看:
vcTabs has 5 objects
A
B
C
D
E
@唐馬格
它正在工作,但我有一個問題要問你。 我添加了 for 循環以增加。 當我添加 [additional_tabs count] 時返回 nil。 為什么這個方法添加相同的對象? 我在 addMore function 中的代碼:
- (void)moreTabs:(NSMutableArray *)a {
for (int i = 1; i < additional_tab_count; i++) {
NSString *additionalTabId = [Tools getStringUserDefault:@"conference_additional_tab_id" :@""];
NSString *additionalTabUrl = [Tools getStringUserDefault:@"conference_additional_tab_url" :@""];
[a addObject:[[VCTab alloc] initWithIdAndTypeAndUrl:additionalTabId :VCTabAdditional :additionalTabUrl]];
}
}
你知道如何獲得這個“詞典”或“additional_tabs”嗎? 我試過但總是返回 nil(看起來像一個新的其他實例,而不是這個字典或來自 initFromJSON 的 additional_tabs)。 我只設法使變量 additional_tab_count 返回 17(正確計數),但我寧願從 if 語句中聲明的 additional_tabs 訪問數組。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.