Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cocoa 在OSX上获取所有用户_Cocoa_Nstableview - Fatal编程技术网

Cocoa 在OSX上获取所有用户

Cocoa 在OSX上获取所有用户,cocoa,nstableview,Cocoa,Nstableview,因此,我想在我的应用程序中对每个用户实施家长控制,但我需要一种获取所有用户并将其添加到NSTableView的方法。这些用户应与登录窗口显示的用户相同,不包括其他用户。。。一个是系统用户 有什么办法吗?另外,我希望能够获得该表视图上的选择,当然也可以根据该选择更改显示的设置。您可以从命令行运行 dscl localhost -list /Local/Default/Users 有很多用户以下划线字符开头,你的应用程序可以忽略这些字符。当然,这个命令可以从cocoa内部运行并读取输出,但也可以更

因此,我想在我的应用程序中对每个用户实施家长控制,但我需要一种获取所有用户并将其添加到NSTableView的方法。这些用户应与登录窗口显示的用户相同,不包括其他用户。。。一个是系统用户


有什么办法吗?另外,我希望能够获得该表视图上的选择,当然也可以根据该选择更改显示的设置。

您可以从命令行运行

dscl localhost -list /Local/Default/Users
有很多用户以下划线字符开头,你的应用程序可以忽略这些字符。当然,这个命令可以从cocoa内部运行并读取输出,但也可以更直接地访问它

您也可以使用Apple框架,但使用包装器可能更容易。我现在找不到最新的,但请搜索以下内容:

我是这样做的:

#import <CoreServices/CoreServices.h>
#import <Collaboration/Collaboration.h>

CSIdentityAuthorityRef defaultAuthority = CSGetLocalIdentityAuthority();
CSIdentityClass identityClass = kCSIdentityClassUser;

CSIdentityQueryRef query = CSIdentityQueryCreate(NULL, identityClass, defaultAuthority);

CFErrorRef error = NULL;
CSIdentityQueryExecute(query, 0, &error);

CFArrayRef results = CSIdentityQueryCopyResults(query);

int numResults = CFArrayGetCount(results);

NSMutableArray * users = [NSMutableArray array];
for (int i = 0; i < numResults; ++i) {
    CSIdentityRef identity = (CSIdentityRef)CFArrayGetValueAtIndex(results, i);

    CBIdentity * identityObject = [CBIdentity identityWithCSIdentity:identity];
    [users addObject:identityObject];
}

CFRelease(results);
CFRelease(query);

//users contains a list of known Aqua-style users.
#导入
#进口
CSIdentityAuthorityRef defaultAuthority=CSGetLocationIdentityAuthority();
CSIdentityClass identityClass=kcsidentityclass用户;
CSIdentityQueryRef query=CSIdentityQueryCreate(NULL,identityClass,defaultAuthority);
CFErrorRef error=NULL;
CSIdentityQueryExecute(查询,0,&错误);
CFArrayRef results=CSIdentityQueryCopyResults(查询);
int numResults=CFArrayGetCount(结果);
NSMutableArray*用户=[NSMutableArray];
对于(int i=0;i

CBIdentity
对象比
CSIdentityRef
对象更便于使用,但它们确实需要导入协作框架。

这里是一个Swift版本,请注意,在Xcode 7.2.1中,“init(CSIdentity:)”在Swift中不可用:CSIdentity在Swift中不可用。”

相反,我们可以使用:

CBIdentity(唯一标识符uuid:NSUID,权限: CBIdentityAuthority)

func getSystemUsers()->[CBIdentity]{
让defaultAuthority=CsgetLocalidentialAuthority().takeUnrepainedValue()
让identityClass=kCSIdentityClassUser
let query=CSIdentityQueryCreate(nil,identityClass,defaultAuthority)
变量错误:非托管?=nil
CSIdentityQueryExecute(查询、0和错误)
let results=CSIdentityQueryCopyResults(query).takeRetainedValue()
让ResultCount=CFArrayGetCount(结果)
var allUsersArray=[CBIdentity]()
对于0中的idx…结果计数-1{
let identity=unsafeBitCast(CFArrayGetValueAtIndex(results,idx),CSIdentityRef.self)
让uuidString=CFUUIDCreateString(nil,CSIdentityGetUUID(identity).takeUnrepainedValue())
如果让uuidNS=nsuid(UUIDString:UUIDString作为字符串),则让identityObject=CBIdentity(uniqueIdentifier:uuidNS,authority:CBIdentityAuthority.defaultIdentityAuthority()){
allUsersArray.append(identityObject)
}
}
返回allUsersArray
}

登录窗口中会显示是否应显示用户的标准,或者是否仅显示UID高于500且外壳未设置为/bin/false的用户。您可以将此作为标准(而不是“如果用户名不以下划线开头”)。
func getSystemUsers()->[CBIdentity]{
        let defaultAuthority    = CSGetLocalIdentityAuthority().takeUnretainedValue()
        let identityClass       = kCSIdentityClassUser

        let query   = CSIdentityQueryCreate(nil, identityClass, defaultAuthority).takeRetainedValue()

        var error : Unmanaged<CFErrorRef>? = nil

        CSIdentityQueryExecute(query, 0, &error)

        let results = CSIdentityQueryCopyResults(query).takeRetainedValue()

        let resultsCount = CFArrayGetCount(results)

        var allUsersArray = [CBIdentity]()

        for idx in 0...resultsCount-1 {

            let identity    = unsafeBitCast(CFArrayGetValueAtIndex(results,idx),CSIdentityRef.self)
            let uuidString  = CFUUIDCreateString(nil, CSIdentityGetUUID(identity).takeUnretainedValue())

            if let uuidNS = NSUUID(UUIDString: uuidString as String), let identityObject =  CBIdentity(uniqueIdentifier: uuidNS, authority: CBIdentityAuthority.defaultIdentityAuthority()){
                allUsersArray.append(identityObject)
            }
        }

        return allUsersArray
    }