示例:我添加了一些NSString对象NSMutableArray: @"Foo", @"Bar", @“FooBar".现在在其他地方我再次访问该数组,我想删除@"Foo".所以我创建了一个新的NSString @"Foo",并将其传递给-removeObject:.文档没有说明哪些标准-removeObject有效.我认为它只关注内存地址,所以在这种情况下它什么都不做.那是对的吗?
我有一个接收许多不同类型对象的方法,并决定如何处理它们:
-(void)performAction:(NSObject *)myAction withItem:(Item *)myItem {
actionCount = -1;
NSLog(@"-- NEW ACTION ARRAY --");
if ([myAction isMemberOfClass:[Look class]]) {
currentActionArray = [self createLookArray:(Look *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[Use class]]) {
currentActionArray = [self createUseArray:(Use *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[Exit class]]) {
currentActionArray = [self createExitArray:(Exit *)myAction item:myItem];
} else if ([myAction isMemberOfClass:[NSArray class]] ) {
NSLog(@"--- CUSTOM ACTION --- %@", myAction);
currentActionArray = (NSArray *)myAction;
}
[self performNextAction];
Run Code Online (Sandbox Code Playgroud)
}
这里有四件事之一:Look,Use,Exit或NSArray.前三个被送去成为NSArrays,最后一个已经是NSArray.
现在,当我从其他地方传递NSArray时,就像这样:
NSArray *myAction = [[NSArray alloc] …Run Code Online (Sandbox Code Playgroud) 我目前正在接收一个文件并将其存储到NSString中.然后我从字符串中创建一个数组并在TableView中显示它.这在一定程度上起作用.我目前正在接收这样的数据:
CompanyName | AccountCode\r \nCompanyName | AccountCode\r \nCompanyName | AccountCode\r \n等等...
在我正在做的那一刻:
NSString *dataString = [NSString stringWithContentsOfURL:url encoding:nil error:nil];
myArray = [dataString componentsSeparatedByString:@"\r\n"];
Run Code Online (Sandbox Code Playgroud)
它显示数据为:
CompanyName | AccountCode CompanyName | AccountCode CompanyName | AccountCode
我的问题是:我可以将"dataString"拆分为二维数组吗?或者我应该创建2个数组(一个使用CompanyName,一个使用AccountCode).我该怎么做?
谢谢
编辑:
// Customize the appearance of table view cells.
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
}
// Configure the cell.
if (testArray.count …Run Code Online (Sandbox Code Playgroud) 我有一个充满自定义对象的NSArray.每个对象都有几个变量:pk,amount,date等.
我想获取pk变量中编号最大的对象.我可以这样做:
NSUInteger maximumpk = [[bets valueForKeyPath:@"@max.pk"] intValue];
Run Code Online (Sandbox Code Playgroud)
这给了我最高pk的实际值.现在我需要获取该对象的索引.我看到当数组只有1个数据变量时使用indexOfObject,但是如何在这个实例中使用它呢?
谢谢
这段代码运行时没有崩溃,我在文档中看不到任何内容,但是它真的安全吗?
[mutableArray enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
// do some stuff to obj before removing it
[mutableArray removeObject:obj];
}];
Run Code Online (Sandbox Code Playgroud) 我正在尝试创建像facebook这样的动态幻灯片菜单.
我必须从json请求中获取一些数据.并在幻灯片表视图的其中一个部分中显示此数据.我是objective-c的新手,我也尝试过使用NSMutableArrays,我遇到了一个错误.在其他表视图中,我做同样但没有部分.只有一个MutableArray,我可以显示表格.
我做这样的事情:
-(void) requestJSONFinishedWithParsedObject:(NSDictionary *)parsedObject{
NSArray *projectsObjectArray = [parsedObject objectForKey:@"projects"];
[self createMainNavigationController];
self.section1 = [NSArray arrayWithObjects:@"Profile", @"Notifications", @"Exit", nil];
self.section2 = [NSArray arrayWithObjects:@"Main", nil];
for (NSDictionary *projectObject in projectsObjectArray)
{
Project *newProject = [[Project alloc] init];
newProject.title= [projectObject objectForKey:@"title"];
self.section3 = [NSArray arrayWithObject:newProject.title];
}
self.menu = [NSArray arrayWithObjects:self.section1, self.section2, self.section3, nil];
[menuTableView reloadData];
}
Run Code Online (Sandbox Code Playgroud)
我有这个错误:
*** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderArray initWithObjects:count:]: attempt to insert nil object from objects[0]'
Run Code Online (Sandbox Code Playgroud) 在询问这个问题之前,我已经阅读了很多SO帖子,我猜这个答案就在那里,但我没有看到.我是Objective-C的新手,我正试图做一个(看似)简单的动作,我无法弄明白.
一般的想法是我有一个NSArray充满对象(特别是类型UIImageView).我想要复制那个数组,我已经做了很多种方式(都成功了).
复制后,我现在有两个数组.我想修改一个对象,比如索引2,只在副本中修改.
到目前为止似乎,因为副本只是复制引用(或指针),更改索引2处的对象将在副本和原始文件中更改它.
那有意义吗?
NSArray *originalArray = @[object1, object2];
Run Code Online (Sandbox Code Playgroud)
我尝试复制这个数组的方式,以便我可以实现我想要的:
NSMutableArray *originalArrayCopy = [NSMutableArray arrayWithArray:originalArray];
NSArray *originalArrayCopy = [originalArray copy];
NSMutableArray *originalArrayCopy = [[NSMutableArray alloc] initWithArray:originalArray];
Run Code Online (Sandbox Code Playgroud)
并且似乎在每种情况下,从副本修改对象也会在原始对象中修改它.
注意:虽然NSArray显然是不可变的,但我原始数组中的对象是可变的.
我有以下NSArray:
NSArray myArray = @[@{@300:@"5 min"},
@{@900:@"15 min"},
@{@1800:@"30 min"},
@{@3600:@"1 hour"}];
Run Code Online (Sandbox Code Playgroud)
我想要我的词典的价值列表:
@[@"5 min",@"15 min",@"30 min",@"1 hour"]
Run Code Online (Sandbox Code Playgroud)
我的词典的关键列表:
@[@300, @900, @1800, @3600]
Run Code Online (Sandbox Code Playgroud)
最好的方法是什么?我在考虑谓词,但我不知道如何使用它?
我有两个不同类型的自定义对象的2个NSArrays.
对象A属性:ID:名称:作者:
对象B属性:bookID:value:终止符:
我需要过滤一个类型为"A"的对象数组,其ID值等于包含"B"类型对象的第二个数组的任何对象的bookID值.
我试图通过将数组转换为集合来使用intersectSet:方法,但由于这两个对象的类型不同,所以没有任何反应.
什么是最有效的过滤方式?我可以指定在进行交叉时要查看的属性吗?
我想知道为什么通过NSArray迭代比通过NSSet迭代更快?我想象它与NSArray的订购事实有关,而NSSet不是,但我是一个经过认证的答案,而不仅仅是猜测.
编辑:
我的问题是:为什么它更快,没有在该主题中解释.而不是它更快.
nsarray ×10
objective-c ×7
cocoa-touch ×3
ios ×3
iphone ×3
nspredicate ×2
nsset ×2
foundation ×1
nsdictionary ×1
nsstring ×1
tableview ×1
uikit ×1
uitableview ×1
xcode ×1