我一直在尝试将字符串的部分读入数组并遇到一些问题.虽然我的任务更复杂,但即使是一个简单的示例情况也会产生同样的问题:代码编译并运行但是字符串数组的大小始终是1,而字符串[0]中包含的唯一内容是" __NSArrayM".
NSString *string = @"John, Bob, Jane";
NSArray *strings = [string componentsSeparatedByString: @", "];
Run Code Online (Sandbox Code Playgroud)
提前感谢任何想法!
我是目标C的新手,所以我需要一些帮助,有没有快速的方法来转换这个字符串:
{{2, 2}, {103, 166}}到一个NSArray,或者只是将值变为四个NSInteger?
我是Objective C和XCode的新手,目前正在开发我的第一款iPhone游戏.游戏必须对超过250,000个单词的拼字游戏字典做一些非常快速的拼写检查,理想情况下足够快,我可以在单个帧中检查100个字符串对单词列表.
我之前在C和actionscript 2中写过这个没有问题,只是使用标准的二进制搜索,但我不确定在Objective C中使用NSString和NSArray等选项实现它的最佳方法.
目前最大的问题是根本不会编译.如果我创建一个填充了NSStrings的NSArray,XCode只会挂起但不会崩溃.我把它编译了大约30分钟没有结果.我正在使用的代码:
words=[NSArray arrayWithObjects:@"aa", @"aah", ...250,000 words... @"zyzzyvas" ,nil];
Run Code Online (Sandbox Code Playgroud)
当wordlist减少到几百个单词时,它编译并正常工作.
任何人都可以解释为什么会失败,或建议一个更好的方法来解决它?
接下来我要尝试的是将wordlist分成许多小块; 以第一个字母分隔,也许还有字母数,但这意味着要重新格式化大量文本文件以进行反复试验,这很可能会碰到同一个墙.
这个问题的另一部分是关于NSArray的速度和NSString的开销的一般查询,与旧式的char指针数组C风格相比.如果NSStrings甚至包含一些额外字节的头或函数指针或其他什么,在iPhone应用程序中制作25万个可能是错误的做法,对吧?
任何建议都将非常感谢.
将plist加载到NSArray后,我试图访问其嵌套数组.
NSArray *tree = [[NSArray alloc] initWithContentsOfFile:path];
for (NSArray *a in tree)
{
//Let's assume object at index 0 is always NSString
NSLog(@"Returning the string: %@ ", [a objectAtIndex:0]);
}
Run Code Online (Sandbox Code Playgroud)
调试器中的一些值:
tree __NSCFArray * 0x6856cf0
0 __NSCFString * 0x6818b70
1 __NSCFString * 0x682be10
2 __NSCFArray * 0x6856cd0
Run Code Online (Sandbox Code Playgroud)
所以我期待for语句跳过前两个NSStrings然后用NSArray执行.
然而步进一行:__ NSCFString*0x6818b70
繁荣,appcrash.
提示?
我有一个名为delegate.allSelectedVerseEnglish的NSMutableArray来自应用程序委托,它有一些值,我能够获得数组计数,我可以在UITableView中正确显示它.但现在我想在textview中显示它.我的UITableView代码是这样的
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
return 1;
}
// Customize the number of rows in the table view.
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return [delegate.allSelectedVerseEnglish count];
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
static NSString *CellIdentifier = @"Cell";
readCell *cell = (readCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (cell == nil) {
cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier] autorelease];
NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"readCell" owner:self options:nil];
cell = [nib objectAtIndex:0];
cell.label.text = [NSString stringWithFormat:@"%d",indexPath.row+1];
cell.textLabel.text = [NSString stringWithFormat:@" %@",[delegate.allSelectedVerseEnglish objectAtIndex:indexPath.row]];
cell.textLabel.font …Run Code Online (Sandbox Code Playgroud) 我有几个NSArray,它们包含相互关联的UIView对象集合(NSArrays是soundView0,soundView1,soundView2和soundView3).我希望能够将BOOL属性与将在数组中启用/解释UIViews的整个数组相关联.
什么是最干净/最恰当的方法来完成这个?
这可能是一个简单的问题,但我不知道对有符号整数值数组进行排序的方法.
我的数组在排序之前,
pointsAry (-2,-7,-5,0,-3,2,-1,-4,1,3,-6)
Run Code Online (Sandbox Code Playgroud)
使用后
NSArray * sortedArray = [pointsAry sortedArrayUsingComparator:^(id str1, id str2){
return [(NSString *)str1 compare:(NSString *)str2 options:NSNumericSearch];
}];
Run Code Online (Sandbox Code Playgroud)
结果
sortedArray : (-1,-2,-3,-4,-5,-6,-7,0,1,2,3)
Run Code Online (Sandbox Code Playgroud)
对于有符号值,sortedArray格式不正确,所以我需要
(-7,-6,-5,-4,-3,-2,-1,0,1,2,3)
Run Code Online (Sandbox Code Playgroud)
如何按上述格式排序?提前致谢.
我有一个UITableView在第一次调用时加载其数组项目.但是,当我刷新tableview时它会崩溃,因为委托方法cellForRowAtIndexPath被提前调用.我有一个整数,表示我的主数据数组的索引,并在我的刷新按钮中重置为0.然而它崩溃是因为它试图在重置之前重新加载数据.我通常会使用indexPath.row作为我的索引,但是数组很复杂,而indexPath.row与我想要为每个单元格显示的内容不匹配.下面是一些代码,任何帮助表示赞赏.
当我下拉刷新AND viewDidLoad以准备数据时,会调用此方法
- (IBAction)refresh:(id)sender {
itemIndexer = 0;
[sender beginRefreshing];
[self loadData];
}
Run Code Online (Sandbox Code Playgroud)
我的loadData方法的一部分
-(void) loadData {
dispatch_queue_t backgroundQueue = dispatch_queue_create("com.Foo.myqueue", 0);
dispatch_queue_t mainQueue = dispatch_get_main_queue();
dispatch_async(backgroundQueue, ^{
[self downloadData];
dispatch_async(mainQueue, ^{
[self.tableView reloadData];
[_rcRefresh endRefreshing];
});
});
Run Code Online (Sandbox Code Playgroud)
在viewDidLoad中我调用最初加载tableview:
[self refresh:_rcRefresh];
Run Code Online (Sandbox Code Playgroud)
我得到一个超出数组错误范围的索引.我使用断点来确定原因,原因很简单,因为刷新没有被调用,否则itemIndexer将被设置为0.而不是它的数字大于数组1.如果它真的有必要我可以发布cellForRowAtIndexPath但是我不确定你是否需要它,如果它在第一次调用时工作.因此,总结对tableview的第一次调用是有效的,并且数据加载正常,但刷新会导致索引超出数组的边界,就像从不调用refresh:一样.
是否有直接的方法将包含NSDictionary的NSArray转换为包含字典值的NSArray?
我有这样一个数组:
a = [ { name = "A"},{ name = "B"}, {name = "C" } ]
我想要这个:
a = [ "A", "B", "C" ]
我只能考虑迭代前一个数组,并将每个字段添加到新的可变字段中,以确保相同的顺序.我想知道是否有更高级别的操作或语法糖来做到这一点.
谢谢.
我是开发应用程序的新手.我有一张NSArray,里面有2张图片.
imageOneArray = [NSArray arrayWithObjects:[UIImage imageNamed:@"White.png"], [UIImage imageNamed:@"Black.png"], nil];
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法制作一个看起来像这样的"if语句":
if ([imageOneArray = [UIImage imageNamed:@"White.png"]) {
//DO SOMETHING
};
Run Code Online (Sandbox Code Playgroud)
上面的代码给了我错误,我该如何解决?我究竟做错了什么?我的作品是什么?
任何帮助将不胜感激.