我正在制作一个iPhone应用程序,显示有关红葡萄酒的信息.这些葡萄酒储存在含有一系列字典的plist中.我正在向应用程序添加一个搜索视图控制器,并且为了轻松启动我想要获得"Name"键的值包含 nameString(来自文本框)的葡萄酒.
它有点停在这里,我需要一些关于最合适的方法的建议.NSArray类中是否有一个函数可以执行此任务,应该引入NSPredicate,NSUserDefaults,还是有其他选项?我做了一些研究,但我需要一些建议,也许是一个开始的例子.
我将推进搜索功能,让用户包括/排除国家,获得适合这种和那种食物的葡萄酒,设定最低价格,最高价格等.字典包含所有这些信息的字符串.所以在我开始这样的高级之前,我需要一些建议,哪些功能可以最好地完成我的工作.
-(IBAction)searchButtonPoke:(id)sender{
NSString *path = [[NSBundle mainBundle] pathForResource:@"Wines" ofType:@"plist"];
allObjectsArray = [[NSMutableArray alloc] initWithContentsOfFile:path];
NSString *nameString = [NSString stringWithFormat:@"%@", [nameTextField text]];
resultObjectsArray = /*objects where the value for the key "Name" contains
nameString*/;
Run Code Online (Sandbox Code Playgroud) 我有一个NSMutableArray当我尝试从中删除对象时,对象没有被删除.当我调试我的代码时,其中有数据.这是我的代码 -
NSMutableArray *myArray = [array copy];
// array is NSArray which contains data
[myArray removeObjectAtIndex:0];
Run Code Online (Sandbox Code Playgroud) 我对设计模式有点菜鸟。我刚刚开始使用单例,我正在考虑使用单例来方便地将数据存储在一个集中的位置,但在这样做之前,我阅读了一些似乎在说这不是正确设计的帖子(或者我可能很困惑) ,但不清楚为什么。我想做的是这样的:
将多个对象数组存储在一个集中的位置,以便可以对对象进行持久处理。
如果不是单身,有没有更好的方法来做到这一点?如果这是糟糕的设计,知道为什么会很棒。
我有一个带有url字符串属性和标题的历史对象.我想使用包含搜索字符串的url搜索所有对象的历史记录,然后删除所有重复项.
示例:我有一系列历史记录对象,其中20个都是" https://www.google.com ",其中4个是" https://www.google.com/#q=search ",我想获得一个数组后面只有一个对象,其网址值为" https://www.google.com ",网址值为" https://www.google.com/#q=search "
这是我当前的代码,它搜索历史记录并返回与字符串匹配的所有对象:
- (NSArray *)historyObjectsContainingQuery:(NSString *)query {
NSMutableArray *matchingObjects = [[NSMutableArray alloc] init];
HistoryManager *HM = [HistoryManager sharedInstance];
for (int i=0; i<[[HM history] count]; i++) {
//History "days"
HistoryObject *historyItem = HistoryObject([[HistoryManager sharedInstance] history][i]);
for (int o=0; o<[historyItem.objects count]; o++) {
//Each object inn each history day
HistoryObject *HO = HistoryObject(historyItem.objects[o]);
if ([HO.title rangeOfString:query options:NSCaseInsensitiveSearch].location != NSNotFound) {
//history objects with their title containing the query string
[matchingObjects addObject:HO];
}
} …Run Code Online (Sandbox Code Playgroud) 我有一个带有 NSStrings 的 NSObject。如何仅将具有唯一 obj.name 的对象添加到 NSMutableArray?我试过 NSOrderedSet 但它只有在你将 NSString 添加到数组而不是包含 NSString 的对象时才有效。
例子。
@@interface MyObject : NSObject
@property (strong, nonatomic) NSString *name;
@end
NSMutableArray *array = {MyObject.name,MyObject.name,MyObject.name};
Run Code Online (Sandbox Code Playgroud)
如何确保没有两个 MyObject 具有相同的名称?
在我的应用程序中,我正在访问并从多个线程更改可变数组.一开始它在我尝试访问一个对象时崩溃objectAtIndex,因为索引超出了界限(该索引处的对象已经从另一个线程中的数组中删除).我在互联网上搜索了如何解决这个问题,我决定尝试这个解决方案.我创建了一个带有NSMutableArray属性的类,请参阅以下代码:
@interface SynchronizedArray()
@property (retain, atomic) NSMutableArray *array;
@end
@implementation SynchronizedArray
- (id)init
{
self = [super init];
if (self)
{
_array = [[NSMutableArray alloc] init];
}
return self;
}
-(id)objectAtIndex:(NSUInteger)index
{
@synchronized(_array)
{
return [_array objectAtIndex:index];
}
}
-(void)removeObject:(id)object
{
@synchronized(_array)
{
[_array removeObject:object];
}
}
-(void)removeObjectAtIndex:(NSUInteger)index
{
@synchronized(_array)
{
[_array removeObjectAtIndex:index];
}
}
-(void)addObject:(id)object
{
@synchronized(_array)
{
[_array addObject:object];
}
}
- (NSUInteger)count
{
@synchronized(_array)
{
return [_array count];
}
}
-(void)removeAllObjects …Run Code Online (Sandbox Code Playgroud) 我有一个NSMutableArray它自己里面有很多数组。在所有索引处的每个数组中,它们进一步具有下面给出的类的自定义对象。
Class User:NSObject{
var name = ""
var userName = ""
var email = ""
var age = 0
var gender = ""
var
}
Run Code Online (Sandbox Code Playgroud)
我想根据两个对象过滤这个嵌套数组。例如,如果用户在 searchBar 中键入一些文本并检查该嵌套数组中的文本,如果该文本与名称或用户名或两者匹配。
我创建了一个如下所示的数组
var childControllers = NSArray()
childControllers = NSArray(objects: OBDPage1, OBDPage2, OBDPage3, OBDPage4)
self.loadScrollView(page: 0)// calling method
Run Code Online (Sandbox Code Playgroud)
现在我想使用如下所示的数组对象
func loadScrollView(page: Int){ // method
if page >= childControllers.count {
return
}
// replace the placeholder if necessary
let controller: OBDPage1ViewController? = childControllers[page]
}
Run Code Online (Sandbox Code Playgroud)
但我遇到了以下错误
Swift-CarAssist/Swift-CarAssist/OBDCarMonitorDeatilViewController.swift:90:67:无法将类型“Any”的值转换为指定类型“OBDPage1ViewController”?
任何人都可以告诉我我哪里出了问题,因为我是斯威夫特的新手。
提前致谢。普里扬卡
Application Specific Information:
*** Terminating app due to uncaught exception 'NSGenericException', reason: '*** Collection <__NSArrayM: 0x17204b070> was mutated while being enumerated.'
Last Exception Backtrace:
0 CoreFoundation 0x0000000186acefe0 __exceptionPreprocess + 124
1 libobjc.A.dylib 0x0000000185530538 objc_exception_throw + 56
2 CoreFoundation 0x0000000186acea30 __NSFastEnumerationMutationHandler + 128
3 UIKit 0x000000018cc22f04 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) clearGestureRecognizers:] + 220
4 UIKit 0x000000018cc22d78 -[UITextInteractionAssistant(UITextInteractionAssistant_Internal) setGestureRecognizers] + 88
5 UIKit 0x000000018d1d1d38 -[UIGestureRecognizerTarget _sendActionWithGestureRecognizer:] + 64
6 UIKit 0x000000018d1d556c _UIGestureRecognizerSendTargetActions + 124
7 UIKit 0x000000018cd8f470 _UIGestureRecognizerSendActions + 252
8 UIKit 0x000000018cc31380 -[UIGestureRecognizer _updateGestureWithEvent:buttonEvent:] …Run Code Online (Sandbox Code Playgroud)var arrEmails = NSMutableArray()
arrEmails = ["a.a@gmail.com", "a.a1@gmail.com", "a.a@gmail.com", "b.b@gmail.com", "c.c@gmail.com", "a.a1@gmail.com"]
Run Code Online (Sandbox Code Playgroud)
上面是我的数组,我想检查是否有任何重复的值。为此,我写了下面的代码。
let set = NSCountedSet.init(array: arrEmails as! [Any])
var duplicates: Int = 0
for var object in set {
if set.count(for: object) > 1 {
duplicates = duplicates+1
}
}
Run Code Online (Sandbox Code Playgroud)
但在上面的代码中,如果数组包含如下值,则返回重复值 1。
arrEmails = ["a.a@gmail.com", "", "", "b.b@gmail.com", "", ""]
Run Code Online (Sandbox Code Playgroud)
我不想删除重复值,我只想检查数组中重复值的数量。怎么查?请帮帮我。
nsmutablearray ×10
ios ×8
objective-c ×5
arrays ×3
swift ×3
iphone ×2
crash ×1
duplicates ×1
filter ×1
nsobject ×1
nsorderedset ×1
nspredicate ×1
search ×1
singleton ×1
unique ×1
xcode ×1