gpt4 book ai didi

objective-c - macOS - 尝试在 NSTextField 上使用自定义 NSFormatter 惨败

转载 作者:行者123 更新时间:2023-12-03 16:34:43 25 4
gpt4 key购买 nike

我正在尝试将 NSFormatter 对象添加到 NSTextField 中,以便我可以验证文本字段是否仅包含字母数字字符串。

所以我这样做:

  1. 我创建了一个新的 Swift macOS 应用。
  2. 我将 NSTextField 添加到 View Controller
  3. 我将自定义 Formatter 添加到 View Controller
  4. 我使用界面生成器将文本字段的格式化程序导出连接到 Formatter 对象。

我创建这个类并分配给 Formatter 对象。

FormatterTextNumbers.h

#import <Foundation/Foundation.h>
@import AppKit;


NS_ASSUME_NONNULL_BEGIN

@interface FormatterTextNumbers : NSFormatter

@end

NS_ASSUME_NONNULL_END

FormatterTextNumbers.m

#import "FormatterTextNumbers.h"

@implementation FormatterTextNumbers

- (BOOL)isAlphaNumeric:(NSString *)partialString
{
static NSCharacterSet *nonAlphanumeric = nil;
if (nonAlphanumeric == nil) {
nonAlphanumeric = [NSCharacterSet characterSetWithCharactersInString:@"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890'. -"];
nonAlphanumeric = [nonAlphanumeric invertedSet];
}

NSRange range = [partialString rangeOfCharacterFromSet:nonAlphanumeric];
if (range.location != NSNotFound) {
return NO;
} else {
return YES;
}
}

- (BOOL)isPartialStringValid:(NSString *)partialString
newEditingString:(NSString * _Nullable __autoreleasing *)newString
errorDescription:(NSString * _Nullable __autoreleasing *)error {

if ([partialString length] == 0) {
return YES; // The empty string is okay (the user might just be deleting everything and starting over)
} else if ([self isAlphaNumeric:partialString]) {
*newString = partialString;
return YES;
}
NSBeep();
return NO;
}

你问,如果我的项目使用 Objective-C ,为什么我在 Swift 中有这些类?简单:如果我使用 Formatter 创建 Swift 类的子类,Xcode 不会让我将该子类分配给 Formatter 对象。我需要创建 Objective-CNSFormatter 子类。

说,当我运行该项目时,文本字段消失,我收到此消息,无论这意味着什么:

Failure1[3071:136161] Failed to set (contentViewController) user defined inspected property on (NSWindow): *** -stringForObjectValue: only defined for abstract class. Define -[FormatterTextNumbers stringForObjectValue:]!

我删除了文本字段和 Formatter 对象之间的连接,应用程序运行良好。

最佳答案

您必须定义该方法

来自 NSFormatter 的 Apple 文档(实际上是半抽象的)

Summary

The default implementation of this method raises an exception.
Declaration

- (NSString *)stringForObjectValue:(id)obj;

其实也是一样的

- (BOOL)getObjectValue:(out id _Nullable * _Nullable)obj forString:(NSString *)string errorDescription:(out NSString * _Nullable * _Nullable)error;

关于objective-c - macOS - 尝试在 NSTextField 上使用自定义 NSFormatter 惨败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59424073/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com